第 2 章 使用 OpenID Connect 保护应用程序和服务
2.1. 可用端点 复制链接链接已复制到粘贴板!
作为完全兼容的 OpenID Connect Provider 实现,红帽构建的 Keycloak 会公开一组端点,供应用程序和服务用来验证和授权其用户。
本节论述了应用程序和服务在与红帽构建的 Keycloak 交互时应使用的一些关键端点。
2.1.1. Endpoints 复制链接链接已复制到粘贴板!
要理解的最重要端点是 已知的
配置端点。它列出了与红帽构建的 Keycloak 中 OpenID Connect 实现相关的端点和其他配置选项。端点是:
/realms/{realm-name}/.well-known/openid-configuration
/realms/{realm-name}/.well-known/openid-configuration
要获取完整的 URL,请添加红帽构建的 Keycloak 的基本 URL,并将 {realm-name}
替换为您的域的名称。例如:
http://localhost:8080/realms/master/.well-known/openid-configuration
有些 RP 库从此端点检索所有必要的端点,但对于其他库,您可能需要单独列出端点。
2.1.1.1. 授权端点 复制链接链接已复制到粘贴板!
/realms/{realm-name}/protocol/openid-connect/auth
/realms/{realm-name}/protocol/openid-connect/auth
授权端点执行最终用户的身份验证。此身份验证通过将用户代理重定向到此端点来实现。
如需了解更多详细信息,请参阅 OpenID Connect 规格中的 Authorization Endpoint 部分。
2.1.1.2. 令牌端点 复制链接链接已复制到粘贴板!
/realms/{realm-name}/protocol/openid-connect/token
/realms/{realm-name}/protocol/openid-connect/token
令牌端点用于获取令牌。令牌可以通过交换授权代码或直接提供凭据(根据所使用的流)来获取。令牌端点也用于在过期时获取新的访问令牌。
如需了解更多详细信息,请参阅 OpenID Connect 规格中的 Token Endpoint 部分。
2.1.1.3. userinfo 端点 复制链接链接已复制到粘贴板!
/realms/{realm-name}/protocol/openid-connect/userinfo
/realms/{realm-name}/protocol/openid-connect/userinfo
userinfo 端点返回有关经过身份验证的用户的标准声明;此端点受 bearer 令牌保护。
如需了解更多详细信息,请参阅 OpenID Connect 规格中的 Userinfo 端点 部分。
2.1.1.4. 退出端点 复制链接链接已复制到粘贴板!
/realms/{realm-name}/protocol/openid-connect/logout
/realms/{realm-name}/protocol/openid-connect/logout
logout 端点会注销经过身份验证的用户。
用户可以重定向到端点,这会导致活跃用户会话被注销。然后,用户代理会被重定向到应用程序。
端点也可以由应用直接调用。要直接调用此端点,需要包含刷新令牌以及验证客户端所需的凭据。
2.1.1.5. 证书端点 复制链接链接已复制到粘贴板!
/realms/{realm-name}/protocol/openid-connect/certs
/realms/{realm-name}/protocol/openid-connect/certs
证书端点返回域启用的公钥,编码为 JSON Web 密钥(JWK)。根据域设置,可以启用一个或多个密钥来验证令牌。如需更多信息,请参阅 服务器管理指南和 JSON Web 密钥规格。
2.1.1.6. 内省端点 复制链接链接已复制到粘贴板!
/realms/{realm-name}/protocol/openid-connect/token/introspect
/realms/{realm-name}/protocol/openid-connect/token/introspect
内省端点用于检索令牌的活动状态。换句话说,您可以使用它来验证访问或刷新令牌。此端点只能由机密客户端调用。
有关如何在此端点调用的更多详细信息,请参阅 OAuth 2.0 Token Introspection 规格。
2.1.1.6.1. 使用 application/jwt 标头触发的内省端点 复制链接链接已复制到粘贴板!
您可以使用 HTTP 标头 Accept: application/jwt
而不是 Accept: application/json
来调用内省端点。如果是 application/jwt
,响应可能包含带有完整 JWT 访问令牌的额外声明 jwt
,这非常有用,特别是要内省的令牌是 轻量级访问令牌。这要求您在客户端高级设置中启用 Introspection Response 中启用支持 JWT 声明,该声明
会触发令牌内省。
2.1.1.7. 动态客户端注册端点 复制链接链接已复制到粘贴板!
/realms/{realm-name}/clients-registrations/openid-connect
/realms/{realm-name}/clients-registrations/openid-connect
动态客户端注册端点用于动态注册客户端。
如需了解更多详细信息,请参阅 <@links.securingapps id="client-registration" /> 章节和 OpenID Connect Dynamic Client Registration 规格。
2.1.1.8. 令牌撤销端点 复制链接链接已复制到粘贴板!
/realms/{realm-name}/protocol/openid-connect/revoke
/realms/{realm-name}/protocol/openid-connect/revoke
令牌撤销端点用于撤销令牌。此端点支持刷新令牌和访问令牌。在撤销刷新令牌时,也会撤销相应客户端的同意。
有关如何在此端点调用的更多详细信息,请参阅 OAuth 2.0 Token Revocation 规格。
2.1.1.9. 设备授权端点 复制链接链接已复制到粘贴板!
/realms/{realm-name}/protocol/openid-connect/auth/device
/realms/{realm-name}/protocol/openid-connect/auth/device
设备授权端点用于获取设备代码和用户代码。它可以被机密或公共客户端调用。
有关如何在此端点调用的更多详细信息,请参阅 OAuth 2.0 设备授权规格。
2.1.1.10. Backchannel Authentication 端点 复制链接链接已复制到粘贴板!
/realms/{realm-name}/protocol/openid-connect/ext/ciba/auth
/realms/{realm-name}/protocol/openid-connect/ext/ciba/auth
backchannel 身份验证端点用于获取 auth_req_id,用于标识客户端发出的身份验证请求。它只能由机密客户端调用。
有关如何在此端点调用的详情,请参阅 OpenID Connect Client Initiated Backchannel Authentication Flow 规格。
另请参阅 Red Hat build of Keycloak 文档(如 Client Initiated Backchannel Authentication Grant 部分) 和 Server Administration Guide 中的 Client Initiated Backchannel Authentication Grant 部分。