2.4. 其他 OpenID Connect 库


Red Hat Single Sign-On 由提供的适配器(通常更易于使用)进行保护,并可更好地与红帽单点登录集成。但是,如果适配器不适用于您的编程语言、框架或平台,您可能会选择使用通用 OpenID Connect Relying ware(RP)库。本章论述了特定于 Red Hat Single Sign-On 的详细信息,不包含特定的协议详情。如需更多信息,请参阅 OpenID Connect 规格OAuth2 规格

2.4.1. Endpoints

要理解的最重要端点是 已知的 配置端点。它列出了与 Red Hat Single Sign-On 中的 OpenID Connect 实施相关的端点和其他配置选项。端点是:

/realms/{realm-name}/.well-known/openid-configuration
Copy to Clipboard Toggle word wrap

要获得完整的 URL,请添加 Red Hat Single Sign-On 的基本 URL,并将 {realm-name} 替换为您的域的名称。例如:

http://localhost:8080/auth/realms/master/.well-known/openid-configuration

某些 RP 库从此端点检索所有必需的端点,但对于其他端点,您可能需要单独列出端点。

2.4.1.1. 授权端点

/realms/{realm-name}/protocol/openid-connect/auth
Copy to Clipboard Toggle word wrap

授权端点执行最终用户的身份验证。这可以通过将用户代理重定向到此端点来实现。

如需了解更多详细信息,请参阅 OpenID Connect 规格中的 Authorization Endpoint 部分。

2.4.1.2. 令牌端点

/realms/{realm-name}/protocol/openid-connect/token
Copy to Clipboard Toggle word wrap

令牌端点用于获取令牌。令牌可以通过交换授权代码来获取,或者直接提供凭证,具体取决于所使用的流。令牌端点还用于在令牌过期时获取新的访问令牌。

如需了解更多详细信息,请参阅 OpenID Connect 规格中的 Token Endpoint 部分。

2.4.1.3. UserInfo 端点

/realms/{realm-name}/protocol/openid-connect/userinfo
Copy to Clipboard Toggle word wrap

userinfo 端点返回有关经过身份验证的用户的标准声明,并由 bearer 令牌保护。

如需了解更多详细信息,请参阅 OpenID Connect 规格中的 Userinfo Endpoint 部分。

2.4.1.4. 退出端点

/realms/{realm-name}/protocol/openid-connect/logout
Copy to Clipboard Toggle word wrap

logout 端点会注销经过身份验证的用户。

用户代理可以重定向到端点,在这种情况下,活跃用户会话被注销。之后,用户代理会重新定向到应用程序。

端点也可以直接由应用调用。要直接调用此端点,需要包含刷新令牌以及验证客户端所需的凭据。

2.4.1.5. 证书端点

/realms/{realm-name}/protocol/openid-connect/certs
Copy to Clipboard Toggle word wrap

证书端点返回由域启用的公钥,并编码为 JSON Web Key(JWK)。根据域设置,可以启用一个或多个密钥来验证令牌。如需更多信息,请参阅 服务器管理指南JSON Web 密钥规格

2.4.1.6. 内省端点

/realms/{realm-name}/protocol/openid-connect/token/introspect
Copy to Clipboard Toggle word wrap

内省端点用于检索令牌的活跃状态。换句话说,您可以使用它来验证访问或刷新令牌。它只能由机密客户端调用。

有关如何在此端点上调用的详情,请参阅 OAuth 2.0 Token Introspection specification

2.4.1.7. 动态客户端注册端点

/realms/{realm-name}/clients-registrations/openid-connect
Copy to Clipboard Toggle word wrap

动态客户端注册端点用于动态注册客户端。

如需了解更多详细信息,请参阅 客户端注册 章节OpenID Connect Dynamic Client Registration 规格

2.4.1.8. 令牌撤销端点

/realms/{realm-name}/protocol/openid-connect/revoke
Copy to Clipboard Toggle word wrap

令牌撤销端点用于撤销令牌。此端点支持刷新令牌和访问令牌。

有关如何在此端点上调用的详情,请参阅 OAuth 2.0 Token Revocation 规格

2.4.1.9. 设备授权端点

/realms/{realm-name}/protocol/openid-connect/auth/device
Copy to Clipboard Toggle word wrap

设备授权端点用于获取设备代码和用户代码。它可以通过机密或公共客户端调用。

有关如何在此端点上调用的详情,请参阅 OAuth 2.0 Device Authorization Grant 规格

2.4.1.10. Backchannel 身份验证端点

/realms/{realm-name}/protocol/openid-connect/ext/ciba/auth
Copy to Clipboard Toggle word wrap

后端通道身份验证端点用于获取 auth_req_id,用于标识客户端提出的身份验证请求。它只能由机密客户端调用。

有关如何在此端点上调用的详情,请参阅 OpenID Connect Client Initiated Backchannel Authentication Flow 规格

另请参阅 Red Hat Single Sign-On 文档中的其他部分,如 Client Initiated Backchannel Authentication Grant section of this guide 和 Server Administration Guide 中的 Client Initiated Backchannel Authentication Grant section 部分。

2.4.2. 验证访问令牌

如果您需要手动验证红帽单点登录发布的访问令牌,您可以调用 内省端点。这种方法的缺点是您必须使网络调用 Red Hat Single Sign-On 服务器。如果您同时出现太多验证请求,这可能很慢,可能会给服务器过载。红帽单点登录访问令牌是数字签名和编码的 JSON Web 令牌(JWT),使用 JSON Web 签名(JWS)。由于它们采用这种方式编码,因此允许您使用发布域的公钥在本地验证访问令牌。您可以在验证代码中硬编码域的公钥,或使用嵌入在 JWS 中的密钥 ID (KID) 的证书端点 来缓存公钥。根据您的代码,有很多第三方库可以使用 JWS 验证。

2.4.3. 流

2.4.3.1. 授权代码

授权代码流将用户代理重定向到红帽单点登录。用户使用红帽单点登录验证后,会创建授权代码,用户代理会重定向到应用程序。然后,应用程序使用授权代码及其凭证从红帽单点登录获取访问令牌、刷新令牌和 ID 令牌。

流目标为 web 应用程序,但也建议用于原生应用程序,包括移动应用程序,其中可以嵌入用户代理。

更多详情请参阅 OpenID Connect 规格中的 授权代码流

2.4.3.2. 隐式

Implicit 流重定向的工作方式与授权代码流类似,而是返回授权代码,而是返回 Access Token 和 ID Token。这可减少额外的调用来交换 Access Token 的授权代码的需求。但是,它不包括 Refresh Token。这会导致,需要一个长到期的 Access Tokens 中的一个问题,因为这很难使这些令牌无效。或 需要新的重定向以在初始访问令牌到期后获取新的访问令牌。如果应用程序只想验证用户并使用注销本身,则 Implicit 流很有用。

还有一个混合流程,其中返回 Access Token 和 Authorization Code。

需要注意的一点是,Implicit 流和混合流都存在潜在的安全风险,因为访问令牌可能会通过 Web 服务器日志和浏览器历史记录泄露。这可通过对访问令牌使用简短过期来缓解。

更多详情请参阅 OpenID Connect 规格中的 Implicit 流

2.4.3.3. 资源所有者密码凭证

资源所有者密码凭证(称为 Red Hat Single Sign-On 中的 Direct Grant)允许更改令牌的用户凭证。不建议使用这个流,除非您绝对需要。例如,这很有用的是传统应用程序和命令行界面。

使用这个流程有一些限制,包括:

  • 用户凭证公开给应用程序
  • 应用程序需要登录页面
  • 应用程序需要了解验证方案
  • 对身份验证流程的更改需要更改应用程序
  • 不支持身份代理或社交登录
  • 不支持流(用户自我注册、所需操作等)

要让客户端允许使用 Resource Owner Password Credentials 授权客户端启用了 Direct Access Grants Enabled 选项。

这个流没有包括在 OpenID Connect 中,而是包括在 OAuth 2.0 规格中。

如需了解更多详细信息,请参阅 OAuth 2.0 规格中的 Resource Owner Password Credentials Grant 章节。

2.4.3.3.1. 使用 CURL 的示例

以下示例演示了如何为 realm master 中的一个用户获得访问令牌,用户名 user,密码 password。该示例使用机密客户端 myclient

curl \
  -d "client_id=myclient" \
  -d "client_secret=40cc097b-2a57-4c17-b36a-8fdf3fc2d578" \
  -d "username=user" \
  -d "password=password" \
  -d "grant_type=password" \
  "http://localhost:8080/auth/realms/master/protocol/openid-connect/token"
Copy to Clipboard Toggle word wrap

2.4.3.4. 客户端凭证

客户端(应用程序和服务)希望代表自己获取访问权限而不是代表用户时使用客户端凭证。例如,对于一般情况下,对系统应用更改的后台服务(而非特定用户)非常有用。

Red Hat Single Sign-On 支持客户端使用 secret 或公钥/私钥进行身份验证。

这个流没有包括在 OpenID Connect 中,而是包括在 OAuth 2.0 规格中。

如需了解更多详细信息,请参阅 OAuth 2.0 规格中的 客户端 凭证授予章节。

2.4.3.5. 设备授权授予

设备授权授权授权由在互联网连接的设备上运行的客户端使用,这些设备具有有限的输入功能,或缺少合适的浏览器。应用程序会要求红帽单点登录一个设备代码和用户代码。Red Hat Single Sign-On 创建设备代码和用户代码。Red Hat Single Sign-On 会返回包括设备代码和用户代码到应用程序的响应。然后,应用程序为用户提供用户代码和验证 URI。用户使用另一个浏览器访问要通过验证 URI 进行身份验证。应用程序会重复轮询红帽单点登录,直到红帽单点登录完成用户授权。如果用户身份验证完成,应用程序会获取设备代码。然后,应用程序使用设备代码及其凭证从红帽单点登录获取访问令牌、刷新令牌和 ID 令牌。

如需了解更多详细信息,请参阅 OAuth 2.0 Device Authorization Grant 规格

2.4.3.6. 客户端初始化的后台验证授予

客户端发起的后台身份验证 Grant 由希望通过直接与 OpenID Provider 通信来启动身份验证流的客户端使用,而无需重定向用户浏览器,如 OAuth 2.0 的授权代码授权代码授权。

客户端请求 Red Hat Single Sign-On 是一个 auth_req_id,用于标识客户端提出的身份验证请求。红帽单点登录创建 auth_req_id。

在收到此 auth_req_id 后,此客户端需要重复轮询红帽单点登录,以获取来自红帽单点登录的 Access Token、Refresh Token 和 ID 令牌,以返回 auth_req_id,直到用户被验证为止。

如果客户端使用 ping 模式,它不需要重复轮询令牌端点,但可以等待 Red Hat Single Sign-On 向指定的客户端通知端点发送的通知。可以在红帽单点登录管理控制台中配置客户端通知端点。在 CIBA 规格中介绍了客户端通知端点合同详情。

如需了解更多详细信息,请参阅 OpenID Connect Client Initiated Backchannel Authentication Flow 规格

另请参阅 Red Hat Single Sign-On 文档的其他位置,如本指南的 Backchannel Authentication Endpoint 和 Server Administrationi ated Backchannel Authentication Grant 部分 (服务器管理指南)。有关 FAPI CIBA 合规性的详细信息,请参阅本指南的 FAPI 部分

2.4.4. 重定向 URI

使用基于重定向的流时,将有效的重定向 uri 用于您的客户端非常重要。重定向 uri 应该尽量具体。这特别适用于客户端(公共客户端)应用程序。否则可能会导致:

  • Open redirects - 攻击者可以利用这个方法创建伪链接,如下所示:
  • 未授权条目 - 当用户已通过 Red Hat Single Sign-On 进行身份验证时,攻击者可以使用公共客户端(其中重定向 uris 尚未正确配置)通过重定向用户获得访问权限,而无需用户了解

在生产环境中,web 应用始终使用 https 作为所有重定向 URI。不要允许重定向到 http。

还有几个特殊的重定向 URI:

http://localhost
此重定向 URI 对原生应用很有用,并允许原生应用在随机端口上创建 Web 服务器,从而能获取授权代码。此重定向 uri 允许任何端口。
urn:ietf:wg:oauth:2.0:oob
如果无法在客户端上启动 Web 服务器(或浏览器不可用),则可以使用特殊的 urn:ietf:wg:oauth:2.0:oob redirect uri。当使用此重定向 uri 时,Red Hat Single Sign-On 在页面的标题和框中显示包含代码的页面。应用程序可以检测浏览器标题已更改,或者用户可以手动将代码复制到应用程序中。通过此重定向 uri,用户也可以使用其他设备获取代码,以转回应用程序。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat