9.6. OAuth v2 身份提供程序
红帽基于 OAuth v2 协议构建 Keycloak 代理身份提供程序。这些身份提供程序(IDP)必须支持 规范中定义的授权代码流,以验证用户和授权访问权限。
流程
- 在菜单中,单击 Identity Providers。
-
从
Add provider列表中,选择OAuth v2。 输入您的初始配置选项。有关配置选项的更多信息,请参阅 常规 IDP 配置。
Expand 表 9.3. OAuth2 设置 配置 描述 授权 URL
授权 URL 端点。
令牌 URL
令牌 URL 端点。
用户信息 URL
从其中获取用户信息的端点。在调用此端点时,红帽构建的 Keycloak 将发送具有身份提供程序发布的访问令牌作为 bearer 令牌的请求。因此,它期望响应是带有声明的 JSON 文档,该声明应该用于获取 ID、用户名、电子邮件和名字等用户配置文件信息。
客户端身份验证
定义红帽构建的 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。
默认范围
一个用空格分隔的范围列表,Red Hat build of Keycloak 随身份验证请求一起发送。
提示
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流显示的屏幕。需要简短状态参数
如果身份提供程序不支持初始 OAuth2 授权请求(EG 超过 100 个字符)中发送的
state参数的值,则需要启用此切换。在这种情况下,Red Hat build of Keycloak 将尝试生成较短的状态参数,并可能会省略一些客户端数据,以便在初始请求中发送。当 IDP 重定向到红帽构建的 Keycloak 时,这可能会导致有限的功能显示错误,如果 IDP 重定向到带有 OAuth2 授权响应中的错误,红帽 Keycloak 可能需要显示错误页面,而不是在过期登录会话时重定向到客户端。
用户向身份提供程序进行身份验证后,并返回到红帽构建的 Keycloak 后,代理将从 User Info URL 设置中定义的端点获取用户配置文件信息。为此,红帽构建的 Keycloak 将使用身份提供程序发布的访问令牌作为 bearer 令牌来调用该端点。虽然 OAuth2 标准支持使用 JWT 格式的访问令牌,但此代理假设访问令牌不透明,并且用户配置集信息应该从单独的端点获取。
要从用户配置集端点返回的 JSON 文档映射声明,您可能需要设置以下设置,以便在联邦用户时映射到用户属性:
| 配置 | 描述 |
|---|---|
| ID 声明 |
代表用户唯一标识符的用户配置集端点返回的 JSON 文档中的声明名称。如果没有提供,则默认为 |
| 用户名声明 |
代表用户用户名的用户配置集端点返回的 JSON 文档中的声明名称。如果没有提供,则默认为 |
| 电子邮件声明 |
代表用户电子邮件的用户配置集端点返回的 JSON 文档中的声明名称。如果没有提供,则默认为 |
| 名称声明 |
代表用户的全名用户配置集端点返回的 JSON 文档中的声明名称。如果没有提供,则默认为 |
| 给定名称声明 |
代表用户的给定名称的用户配置集端点返回的 JSON 文档中的声明名称。如果没有提供,则默认为 |
| 系列名称声明 |
代表用户系列名称的用户配置文件端点返回的 JSON 文档中的声明名称。如果没有提供,则默认为 |
您可以通过提供指向授权服务器元数据的 URL 或文件来导入所有此配置数据。如果您连接到红帽构建的 Keycloak 外部 IDP,您可以从 < root>/realms/{realm-name}/.well-known/openid-configuration 中导入 IDP 设置。这个链接是描述 IDP 的元数据的 JSON 文档。