OpenMetadata 集成 Auth0 SSO 完整配置指南:OAuth 2.0 / OIDC 认证参数逐项详解
【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata
Auth0 是业界常用的身份即服务(IDaaS)平台,OpenMetadata 通过 OAuth 2.0 与 OpenID Connect(OIDC)协议支持用户使用 Auth0 账户登录。本文以仓库中的 auth0SSOClientConfig.md 文档为骨架,逐项拆解 OpenMetadata UI 中 Auth0 SSO 的每一个配置字段(Authentication、OIDC、Authorizer 三大区块),并结合 Auth0Validator.java 的校验源码、auth0SSOClientConfig.json 的 JSON Schema 以及 openmetadata.yaml 的环境变量映射,说明每个参数的作用、默认值、配置位置与底层校验逻辑。读完本文,你将能独立完成从 Auth0 应用注册、OpenMetadata 侧参数填写到团队自动分配、管理员授权的端到端配置,并理解常见认证失败的根本原因。
一、整体认识:Auth0 SSO 在 OpenMetadata 中的位置
OpenMetadata 的认证体系分为authenticationConfiguration(认证配置)与authorizerConfiguration(授权配置)两大部分。在 authConfig.json 中,auth0是provider的可选值之一,对应$ref指向 auth0SSOClientConfig.json;后者定义了三项必填属性:
clientId:Auth0 客户端 ID;secretKey:Auth0 客户端密钥(格式标注为password);domain:Auth0 域名。
UI 侧的auth0SSOClientConfig.md正是该 Schema 的字段级说明文档,它把配置项分成三组:Authentication Configuration(认证配置)、OIDC Configuration(仅 Confidential 客户端显示)、Authorizer Configuration(授权配置)。UI 会根据Client Type动态显隐字段,这也是文中多次出现 "仅当 Client Type 为 Confidential 时显示" 的原因。
二、Authentication Configuration:认证基础参数
以下字段位于认证区块,是任何 Auth0 接入都必须理解的基础配置。
Provider Name(providerName)
- 定义:当前 Auth0 SSO 配置实例的人类可读名称;
- 示例:
Auth0 SSO、Company Auth0、Custom Identity Provider; - 作用:帮助在日志和用户界面中区分不同的 SSO 配置;
- 注意:它只是显示名称,不影响认证功能本身。
Client Type(clientType)
- 定义:定义应用是公开(Public,无客户端密钥)还是机密(Confidential,需要客户端密钥);
- 可选值:
Public|Confidential; - 示例:
Confidential; - 作用:决定安全级别与认证流程。Confidential 客户端可以安全存储密钥;
- 选择建议:
- SPA 与移动端应用选择Public;
- 后端服务与 Web 应用选择Confidential;
- Auth0 场景通常使用Confidential。
在源码层面,clientType直接决定校验分支:Auth0Validator.validateAuth0Configuration()根据authConfig.getClientType()进入validateAuth0PublicClient()(校验 authority、clientId 与 publicKeyUrls)或validateAuth0ConfidentialClient()(校验 discoveryUri、JWKS 与客户端凭证)两条路径。环境变量对应AUTHENTICATION_CLIENT_TYPE,默认public,见 openmetadata.yaml。
Enable Self Signup(selfSignup)
- 定义:是否允许用户在首次登录时自动创建账户;
- 可选值:
Enabled|Disabled; - 示例:
Enabled; - 作用:控制新用户是自动加入还是需要人工审批;
- 注意:需要对用户访问做更严格控制时建议
Disabled; - 环境变量:
AUTHENTICATION_ENABLE_SELF_SIGNUP,默认true(见 openmetadata.yaml)。
Client ID(clientId)
- 定义:Auth0 中为你的应用分配的 Application(Client)ID;
- 示例:
abc123def456ghi789jkl012mno345pqr; - 作用:认证过程中 Auth0 用它识别你的应用;
- 获取位置:Auth0 控制台 → Applications → 你的应用 → Overview → Application (client) ID。
源码中,Public 客户端会调用validateClientIdViaAuthorizationEndpoint():向{domain}/authorize构造带client_id、response_type=code的测试 URL 并禁用重定向请求;若 Auth0 返回 302/200(跳转到登录页)则判定 Client ID 有效,返回 400/404 则报 "Invalid Auth0 client ID",见 Auth0Validator.java。环境变量为AUTHENTICATION_CLIENT_ID。
Callback URL(callbackUrl)
- 定义:Auth0 发送认证响应的重定向 URI;
- 示例:
https://yourapp.company.com/callback; - 作用:必须与 Auth0 中配置的值完全一致,否则认证失败;
- 注意:
- 必须在 Auth0 → Applications → Authentication → Redirect URIs 中注册;
- 生产环境务必使用 HTTPS。
在conf/openmetadata.yaml中对应AUTHENTICATION_CALLBACK_URL,注释明确要求形如https://yourhost/api/v1/callback(见 openmetadata.yaml)。此外该文件还提供additionalTrustedRedirectUris(AUTHENTICATION_ADDITIONAL_TRUSTED_REDIRECT_URIS),用于浏览器扩展等额外重定向场景,示例即为https://<extension-id>.chromiumapp.org/auth0,说明 Auth0 接入在 OpenMetadata 中是被显式支持的重定向场景。
Authority(authority)
- 定义:为你的 tenant 签发令牌的 Auth0 端点;
- 示例:
https://dev-abc123.us.auth0.com/your-auth0-domain; - 作用:告知 OpenMetadata 应向哪个 Auth0 tenant 做认证;
- 注意:
- 将
your-auth0-domain替换为实际的 Auth0 tenant ID; - 多租户应用可以使用
common代替 tenant ID。
- 将
对应环境变量AUTHENTICATION_AUTHORITY(默认https://accounts.google.com)。在 Public 客户端校验中,validateAuth0Domain()会拼接/.well-known/openid-configuration并实际发起 HTTP 请求,要求返回 200 且 discovery 文档必须包含issuer、authorization_endpoint、token_endpoint、userinfo_endpoint四个字段,且issuer必须以https://开头(见 Auth0Validator.java)。
Public Key URLs(publicKey)
- 定义:Auth0 发布用于令牌验证的公钥的 URL 列表;
- 示例:
["https://dev-abc123.us.auth0.com/common/discovery/v2.0/keys"]; - 作用:用于验证来自 Auth0 的 JWT 令牌签名;
- 注意:通常可从 discovery URI 自动发现,极少需要手工配置。
源码中的validatePublicKeyUrls()补充了更严格的事实:至少有一个公钥 URL 必须是 Auth0 的 JWKS 端点{domain}/.well-known/jwks.json,URL 的 host 必须以.auth0.com结尾或包含.;每个 URL 必须可访问(HTTP 200)且返回 JSON 中含非空keys数组(或 URL 含/pem),见 Auth0Validator.java。环境变量为AUTHENTICATION_PUBLIC_KEYS。
JWT Principal Claims(principals)
⚠️关键警告:配置错误的 claims 会把包括管理员在内的所有用户锁在门外!
- 定义:用于识别用户主体(principal)的 JWT claims;
- 默认值:
["email", "name", "sub"](推荐); - 作用:决定 JWT 中哪个 claim 用来标识用户;
- 注意:
- 这些 claims必须存在于 Auth0 签发的 JWT 中;
- 顺序很重要:第一个匹配的 claim 被用于用户识别;
- 常见的 Auth0 claims:
email、name、sub、nickname; - 默认值适用于绝大多数 Auth0 配置,仅在有个性化 claim 需求时才修改。
环境变量AUTHENTICATION_JWT_PRINCIPAL_CLAIMS在仓库中的默认值为[email,preferred_username,sub](见 openmetadata.yaml),与文档推荐的[email, name, sub]略有差异——这正是配置时需要注意的:以 UI 表单实际填写为准,并确保所选 claim 确实出现在 Auth0 令牌中。
JWT Principal Claims Mapping(jwtPrincipalClaimsMapping)
- 定义:将 JWT claims 映射为 OpenMetadata 用户属性(设置后将覆盖
jwtPrincipalClaims); - 示例:
["email:email", "username:preferred_username"]; - 格式:
openmetadata字段:jwt_claim; - 校验要求:
- 使用该字段时,
username与email两个映射必须同时存在; - 只允许
username和email两个 key,其他 key 一律不允许; - 校验失败时错误会显示在该字段上。
- 使用该字段时,
- 重要提示:对绝大多数 Auth0 配置来说该字段几乎用不到,默认的
jwtPrincipalClaims(email、name、sub)已经能正确处理用户识别,仅在特殊 claim 需求时才配置。
对应环境变量AUTHENTICATION_JWT_PRINCIPAL_CLAIMS_MAPPING(默认[],见 openmetadata.yaml)。
JWT Team Claim Mapping(jwtTeamClaimMapping)
- 定义:包含团队/部门信息的 Auth0 claim 或属性,用于自动分配团队;
- 示例:
"department"、"groups"、"organization",或自定义用户元数据字段; - 作用:登录时根据 Auth0 用户资料中的信息,将用户自动分配进 OpenMetadata 已存在的团队;
- 工作方式:
- 从指定 claim 提取值(例如设置为
department就读取 Auth0 中用户的部门); - 对数组型 claim(如
groups)会处理数组中的全部值; - 将提取的值与 OpenMetadata 中的团队名进行匹配;
- 将用户分配到所有匹配的、类型为Group的团队;
- 若团队不存在或类型不是 Group,仅记录 warning,认证流程继续。
- 从指定 claim 提取值(例如设置为
- Auth0 侧配置:
- 标准用户资料字段:
department、organization; - 自定义用户元数据可在 Auth0 → User Management → Users → User Details 配置;
- 基于组/角色的团队可使用
groups或rolesclaims; - 可通过 Auth0 Rules 或 Actions 添加自定义 claims 到 JWT 中。
- 标准用户资料字段:
- 注意:
- 目标团队必须已在 OpenMetadata 中存在;
- 只有类型为
Group的团队可被自动分配(Organization、BusinessUnit类型不行); - 团队名区分大小写,必须精确匹配;
- 数组型 claims(如
groups、roles)支持多团队分配。
三、OIDC Configuration:仅 Confidential 客户端可见的参数
以下字段仅在Client Type = Confidential时显示。
OIDC Client ID(id)
- 定义:用于 Auth0 OIDC 认证的应用客户端 ID;
- 示例:
abc123def456ghi789jkl012mno345pqr; - 作用:在 OIDC 流程中向 Auth0 标识你的应用;
- 注意:与 Auth0 应用注册时的 Client ID 相同。
OIDC Client Secret(clientSecret)
- 定义:Confidential 客户端与 Auth0 认证时使用的密钥;
- 示例:
abc123def456ghi789jkl012mno345pqr678st; - 作用:Confidential 客户端安全认证 Auth0 所必需;
- 注意:
- 在 Auth0 → Applications → Certificates & secrets 生成;
- 妥善保管并定期轮换;
- 仅 Confidential 客户端类型显示。
源码中validateClientCredentials()会先校验 Client ID 是否被 Auth0 识别(400/404 报 "Invalid client ID"),再向{domain}/oauth/token以grant_type=client_credentials提交表单,返回 200 即通过;响应中invalid_client/unauthorized_client对应无效密钥、access_denied对应访问被拒,见 Auth0Validator.java。对应环境变量OIDC_CLIENT_ID与OIDC_CLIENT_SECRET。
OIDC Request Scopes(scopes)
- 定义:认证过程中向 Auth0 请求的权限范围;
- 默认值:
openid email profile; - 示例:
openid email profile User.Read; - 作用:决定 OpenMetadata 可以访问哪些用户信息;
- 注意:多数场景下
openid email profile已足够。
OIDC Discovery URI(discoveryUri)
- 定义:Auth0 的 OpenID Connect 元数据端点;
- 示例:
https://dev-abc123.us.auth0.com/your-auth0-domain/v2.0/.well-known/openid-configuration; - 作用:让 OpenMetadata 自动发现 Auth0 的 OIDC 端点;
- 注意:将
your-auth0-domain替换为实际 tenant ID。
这是 Confidential 客户端校验的核心输入:extractAuth0DomainFromOidcConfig()会从discoveryUri中剔除/.well-known/openid-configuration后缀以还原 Auth0 域名,若为空则直接抛出IllegalArgumentException(见 Auth0Validator.java)。随后OidcDiscoveryValidator.validateAgainstDiscovery()会用该 discovery 文档校验 scopes、response types 等声明是否匹配。对应环境变量OIDC_DISCOVERY_URI。
OIDC Use Nonce(useNonce)
- 定义:防止 OIDC 流程中重放攻击的安全特性;
- 默认值:
false; - 作用:确保每次认证请求唯一,增强安全性;
- 注意:若提供商支持,可开启以获得额外安全保护。
OIDC Disable PKCE(disablePkce)
- 定义:是否禁用 Proof Key for Code Exchange(PKCE 安全扩展);
- 默认值:
false; - 作用:PKCE 为授权码流程增加安全性;
- 注意:出于安全考虑应保持启用(即
false)。
OIDC Max Clock Skew(maxClockSkew)
- 定义:验证令牌时系统间允许的最大时间差;
- 示例:
0(秒); - 作用:避免因轻微时钟偏差导致令牌校验失败;
- 注意:通常 0 即可,除非存在明显的时钟偏差问题。
OIDC Client Authentication Method(clientAuthenticationMethod)
- 定义:客户端与 Auth0 认证时使用的方法;
- 默认值:
client_secret_post(自动配置); - 作用:OpenMetadata 使用 Auth0 支持的
client_secret_post; - 注意:该字段隐藏且自动配置;Auth0 同时支持
client_secret_post与client_secret_basic。
OpenMetadata Access Token Validity(tokenValidity)
- 定义:OpenMetadata 访问 JWT 的有效期(秒);
- 默认值:
3600(1 小时); - 最小值:1 秒;
- 示例:
3600; - 作用:控制用于 OpenMetadata API 请求的令牌生命周期;
- 注意:该值不会继承 Auth0 令牌的生命周期。
OIDC Custom Parameters(customParams)
- 定义:OIDC 请求中附加发送的额外参数;
- 示例:
{"prompt": "select_account", "domain_hint": "company.com"}; - 作用:允许定制 Auth0 的认证行为;
- 注意:常用参数包括
prompt、domain_hint、login_hint。
OIDC Callback URL / Redirect URI(callbackUrl)
- 定义:认证完成后 Auth0 重定向到的 URL;
- 自动生成:该字段自动填充为
{your-domain}/callback; - 示例:
https://openmetadata.company.com/callback; - 作用:必须在 Auth0 配置中注册;
- 注意:
- 该字段为只读,不可编辑;
- 请原样复制此 URL 并添加到 Auth0 的允许重定向 URI 列表;
- 格式恒为
{your-domain}/callback。
OIDC Max Age(maxAge)
- 定义:重新认证前允许的最大认证时长(秒);
- 示例:
3600; - 作用:控制用户需要重新认证的频率;
- 注意:留空表示无特定 max age 要求。
OIDC Prompt(prompt)
- 定义:控制 Auth0 的认证提示行为;
- 可选值:
none|login|consent|select_account; - 示例:
select_account; - 作用:影响认证过程中的用户体验;
- 含义:
login:始终要求输入凭证;consent:提示授予权限;select_account:显示账户选择器。
OIDC Session Expiry(sessionExpiry)
- 定义:用户会话的有效时长(秒);
- 默认值:
604800(7 天); - 示例:
604800; - 作用:控制用户需要重新认证的频率;
- 注意:仅适用于 Confidential 客户端。
该值与 openmetadata.yaml 中AUTHENTICATION_SESSION_EXPIRY的默认值"604800"一致,注释注明 "7 days; applies to all auth providers"。
四、Authorizer Configuration:授权与管理员配置
Admin Principals(adminPrincipals)
- 定义:拥有管理员权限的用户主体列表;
- 示例:
["admin", "superuser"]; - 作用:这些用户在 OpenMetadata 中拥有全部管理权限;
- 注意:使用用户名(不是邮箱地址)——用户名取自邮箱前缀(
@之前的部分)。
Principal Domain(principalDomain)
- 定义:用户主体的默认域名;
- 示例:
company.com; - 作用:仅提供用户名时用于构造完整用户主体;
- 注意:通常填写组织的首要域名。
Enforce Principal Domain(enforcePrincipalDomain)
- 定义:是否强制所有用户属于 principal 域名;
- 默认值:
false; - 示例:
true; - 作用:通过限制只有特定域名用户可访问,增加一层安全防护。
对应环境变量AUTHORIZER_ENFORCE_PRINCIPAL_DOMAIN,默认false(见 openmetadata.yaml)。
Allowed Domains(allowedDomains)
- 定义:允许访问 OpenMetadata 的邮箱域名列表;
- 示例:
["company.com", "partner-company.com"]; - 作用:精细控制哪些邮箱域名可以通过 Auth0 认证;
- 注意:
- 与
enforcePrincipalDomain配合使用; - 启用
enforcePrincipalDomain后,只有邮箱地址属于这些域名的用户可访问; - 如果只有一个 Auth0 tenant,可留空或只使用单个
principalDomain; - 当 Auth0 tenant 包含多个域名的用户时非常有用。
- 与
对应环境变量AUTHORIZER_ALLOWED_DOMAINS,默认[](见 openmetadata.yaml)。
Enable Secure Socket Connection(enableSecureSocketConnection)
- 定义:是否使用 SSL/TLS 建立安全连接;
- 默认值:
false; - 示例:
true; - 作用:确保通信加密,保障安全;
- 注意:生产环境应启用。
对应环境变量AUTHORIZER_ENABLE_SECURE_SOCKET,默认false(见 openmetadata.yaml)。
五、配置文件与环境变量对照:快速落地 Auth0
在conf/openmetadata.yaml中,认证与授权配置都支持环境变量注入。落地 Auth0 时,将provider设为auth0并按需覆盖下列变量(完整上下文见 openmetadata.yaml):
| UI 字段 | 环境变量 | 默认值 |
|---|---|---|
| Client Type | AUTHENTICATION_CLIENT_TYPE | public |
| Provider | AUTHENTICATION_PROVIDER | basic(Auth0 场景设为auth0) |
| Client ID | AUTHENTICATION_CLIENT_ID | 空 |
| Callback URL | AUTHENTICATION_CALLBACK_URL | 空(形如https://yourhost/api/v1/callback) |
| Authority | AUTHENTICATION_AUTHORITY | https://accounts.google.com |
| Public Key URLs | AUTHENTICATION_PUBLIC_KEYS | 本机 JWKS |
| JWT Principal Claims | AUTHENTICATION_JWT_PRINCIPAL_CLAIMS | [email,preferred_username,sub] |
| JWT Claims Mapping | AUTHENTICATION_JWT_PRINCIPAL_CLAIMS_MAPPING | [] |
| Enable Self Signup | AUTHENTICATION_ENABLE_SELF_SIGNUP | true |
| Session Expiry | AUTHENTICATION_SESSION_EXPIRY | 604800 |
| OIDC Client ID | OIDC_CLIENT_ID | 空 |
| OIDC Client Secret | OIDC_CLIENT_SECRET | 空 |
| OIDC Discovery URI | OIDC_DISCOVERY_URI | 空 |
| Enforce Principal Domain | AUTHORIZER_ENFORCE_PRINCIPAL_DOMAIN | false |
| Allowed Domains | AUTHORIZER_ALLOWED_DOMAINS | [] |
| Enable Secure Socket | AUTHORIZER_ENABLE_SECURE_SOCKET | false |
六、底层校验链路与常见失败点
理解 Auth0Validator.java 的校验顺序,有助于快速定位配置问题:
- Public 客户端:校验 authority(实际请求
/.well-known/openid-configuration)→ 校验 Client ID(向/authorize发无重定向请求判断 302/400/404)→ 校验 Public Key URLs(必须包含{domain}/.well-known/jwks.json)。 - Confidential 客户端:从
discoveryUri提取 Auth0 域名 → 用 discovery 文档交叉校验 → 校验 JWKS 公钥 URL → 调用/oauth/token用client_credentials实测凭证有效性。
对应的单元测试 Auth0ValidatorTest.java 覆盖了典型失败场景:无效 authority(期望报 "Domain validation failed")、Confidential 客户端缺失 discoveryUri(期望报错含 "Auth0 domain" 或 "discoveryUri")、空 client secret、非法公钥 URL 域名等,可作为排查时的对照清单。
常见失败点归纳:
- Callback URL 不一致:OpenMetadata 侧自动生成的
{your-domain}/callback必须原样登记到 Auth0 Redirect URIs,任何出入都会导致回调失败; - JWT claims 选择不当:
jwtPrincipalClaims中配置的 claim 若不在 Auth0 令牌中,将导致所有用户(含管理员)无法识别,这正是文档中红色警告的来源; - Discovery URI 域名错误:Confidential 客户端无法从
discoveryUri提取合法域名时会直接校验失败; - 公钥 URL 不含 Auth0 JWKS 端点:至少一个 URL 必须是
{domain}/.well-known/jwks.json,且域名需匹配.auth0.com模式; - 团队自动分配失效:目标团队不存在、团队类型不是 Group、或团队名大小写不匹配,均只记录 warning 而不会中断认证。
七、总结
Auth0 SSO 的接入在 OpenMetadata 中是一条被完整支持的认证路径:UI 表单覆盖了认证、OIDC、授权三组参数,JSON Schema 定义了clientId、secretKey、domain三个基础属性,Auth0Validator则提供了从 discovery 文档到 JWKS、再到实际 token 请求的多层校验。按本文逐项填写并核对 Auth0 侧的 Redirect URI、Client Secret 与 claims 配置,即可完成安全可靠的 Auth0 单点登录接入。
【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考