9.6. OAuth v2 身份提供程序


红帽基于 OAuth v2 协议构建 Keycloak 代理身份提供程序。这些身份提供程序(IDP)必须支持 规范中定义的授权代码流,以验证用户和授权访问权限。

流程

  1. 在菜单中,单击 Identity Providers
  2. Add provider 列表中,选择 OAuth v2
  3. 输入您的初始配置选项。有关配置选项的更多信息,请参阅 常规 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 文档映射声明,您可能需要设置以下设置,以便在联邦用户时映射到用户属性:

Expand
表 9.4. 用户配置集声明
配置描述

ID 声明

代表用户唯一标识符的用户配置集端点返回的 JSON 文档中的声明名称。如果没有提供,则默认为 sub

用户名声明

代表用户用户名的用户配置集端点返回的 JSON 文档中的声明名称。如果没有提供,则默认为 preferred_username

电子邮件声明

代表用户电子邮件的用户配置集端点返回的 JSON 文档中的声明名称。如果没有提供,则默认为 email

名称声明

代表用户的全名用户配置集端点返回的 JSON 文档中的声明名称。如果没有提供,则默认为 name

给定名称声明

代表用户的给定名称的用户配置集端点返回的 JSON 文档中的声明名称。如果没有提供,则默认为 given_name

系列名称声明

代表用户系列名称的用户配置文件端点返回的 JSON 文档中的声明名称。如果没有提供,则默认为 family_name

您可以通过提供指向授权服务器元数据的 URL 或文件来导入所有此配置数据。如果您连接到红帽构建的 Keycloak 外部 IDP,您可以从 < root>/realms/{realm-name}/.well-known/openid-configuration 中导入 IDP 设置。这个链接是描述 IDP 的元数据的 JSON 文档。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat