9.5. OpenID Connect v1.0 身份提供程序
红帽基于 OpenID Connect 协议构建 Keycloak 代理身份提供程序。这些身份提供程序(IDP)必须支持 规范中定义的授权代码流,以验证用户和授权访问权限。
流程
- 在菜单中,单击 Identity Providers。
从
Add provider
列表中,选择OpenID Connect v1.0
。添加身份提供程序
输入您的初始配置选项。有关配置选项的更多信息,请参阅 常规 IDP 配置。
表 9.2. OpenID 连接配置 Configuration 描述 授权 URL
OIDC 协议需要的授权 URL 端点。
令牌 URL
OIDC 协议所需的令牌 URL 端点。
logout URL
OIDC 协议中的注销 URL 端点。这个值是可选的。
Backchannel Logout
对 IDP 注销用户的后台、带外 REST 请求。某些 IDP 仅通过浏览器重定向执行注销,因为它们可以使用浏览器 Cookie 识别会话。
用户信息 URL
OIDC 协议定义的端点。此端点指向用户配置集信息。
客户端身份验证
定义红帽构建的 Keycloak 使用的 Client Authentication 方法,用于授权代码流。如果使用私钥签名的 JWT,红帽构建的 Keycloak 使用 realm 私钥。在其他情况下,定义客户端 secret。如需更多信息,请参阅 客户端身份验证规格。
客户端 ID
用作外部 IDP 的 OIDC 客户端的域。如果您使用授权代码流与外部 IDP 交互,则域必须具有 OIDC 客户端 ID。
Client Secret
来自外部 密码库 的客户端机密.如果您使用授权代码流,则需要此 secret。
客户端断言签名算法
创建 JWT 断言为客户端身份验证的签名算法。如果 JWT 使用私钥或客户端机密签名为 jwt,则需要它。如果没有指定算法,则会调整以下算法。使用私钥签名的 JWT 时,会调整
RS256
。当客户端 secret 作为 jwt 时,会调整HS256
。Client Assertion Audience
用于客户端断言的使用者。默认值为 IDP 的令牌端点 URL。
发布者
红帽构建的 Keycloak 根据这个值验证来自 IDP 的响应中的签发者声明。
默认范围
红帽构建的 OIDC 范围列表与身份验证请求一起发送。默认值为
openid
。一个空格来分隔每个范围。提示
OIDC 规格中的 prompt 参数。通过此参数,您可以强制重新身份验证和其他选项。如需了解更多详细信息,请参阅规格。
接受来自客户端的 prompt=none 转发
指定 IDP 是否接受包含
prompt=none
查询参数的转发验证请求。如果 realm 收到带有prompt=none
的 auth 请求,域会检查用户当前是否经过身份验证,如果用户还没有登录,则返回login_required
错误。当 Red Hat build of Keycloak 确定 auth 请求的默认 IDP 时(使用kc_idp_hint
查询参数或具有域的默认 IDP),您可以将带有prompt=none
的 auth 请求转发到默认 IDP。默认 IDP 检查用户的身份验证。因为不是所有带有prompt=none
的 IDP 支持请求,因此红帽构建的 Keycloak 会使用此交换机来指示默认 IDP 在重定向身份验证请求前支持该参数。如果在 IDP 中未经身份验证的用户,客户端仍然会收到
login_required
错误。如果用户在 IDP 中是真实的,如果红帽构建的 Keycloak 必须显示需要用户交互的身份验证页面,客户端仍然可以收到interaction_required
错误。此身份验证包括所需的操作(如密码更改)、同意屏幕,以及first broker login
流或post broker login
流显示的屏幕。验证签名
指定红帽构建的 Keycloak 验证签名是否在此 IDP 签名的外部 ID 令牌上。如果 ON,红帽构建的 Keycloak 必须知道外部 OIDC IDP 的公钥。为了提高性能,红帽构建的 Keycloak 会缓存外部 OIDC 身份提供程序的公钥。
使用 JWKS URL
如果
Validate Signatures
为 ON,则此开关适用。如果使用 JWKS URL 为 ON,红帽构建的 Keycloak 会从 JWKS URL 下载 IDP 的公钥。当身份提供程序生成新的密钥对时,新密钥会下载。如果 OFF,红帽构建的 Keycloak 使用其数据库的公钥(或证书),因此当 IDP 密钥对更改时,将新密钥导入到红帽构建的 Keycloak 数据库。JWKS URL
指向 IDP JWK 密钥位置的 URL。如需更多信息,请参阅 JWK 规格。如果您使用外部的 Red Hat build of Keycloak 作为 IDP,如果经过代理的红帽构建的 Keycloak 运行,且域为
test
,则可以使用 http://broker-keycloak:8180/realms/test/protocol/openid-connect/certs 等 URL。http://broker-keycloak:8180验证公钥
红帽构建的 Keycloak 使用 PEM 格式的公钥来验证外部 IDP 签名。如果
Use JWKS URL
为 OFF,则应用此密钥。验证公钥 Id
如果 Use JWKS URL 为 OFF,则应用此设置。此设置以 PEM 格式指定公钥的 ID。因为没有来自密钥的计算密钥 ID 的标准方法,外部身份提供程序可以使用红帽构建的 Keycloak 使用的不同算法。如果没有指定此字段的值,红帽构建的 Keycloak 会使用所有请求验证公钥,而不考虑外部 IDP 发送的密钥 ID。当 ON 时,此字段的值是由红帽构建的 Keycloak 用来验证来自供应商的签名的密钥 ID,必须与 IDP 指定的密钥 ID 匹配。
您可以通过提供指向 OpenID Provider Metadata 的 URL 或文件来导入所有此配置数据。如果您连接到红帽构建的 Keycloak 外部 IDP,您可以从 < root>/realms/{realm-name}/.well-known/openid-configuration
中导入 IDP 设置。这个链接是描述 IDP 的元数据的 JSON 文档。
如果要在提供程序中使用 Json Web 加密(JWE) ID 令牌或用户Info 响应,则 IDP 需要知道要与红帽构建的 Keycloak 搭配使用的公钥。提供程序使用为不同加密算法定义的 域密钥 来解密令牌。Red Hat build of Keycloak 提供了一个标准的 JWKS 端点,IDP 可用于自动下载密钥。