SSO 和认证协议
单点登录(SSO)
单点登录(SSO) 是一种认证机制,允许用户只需登录一次即可访问多个应用程序,无需重复输入凭据。Keycloak 通过基于浏览器的会话 Cookie(作用域限定在 Realm 内)实现 SSO。
当用户通过 Keycloak 进行认证时:
- Keycloak 建立会话并在浏览器中发放会话 Cookie。
- 当用户访问同一 Realm 中注册的另一个应用时,该应用会重定向到 Keycloak。
- Keycloak 检测到已有的会话 Cookie,向应用发放新的令牌,无需用户再次登录。
SSO 仅适用于单个 Realm。不同 Realm 之间的用户需要分别认证。
单点登出(SLO)
Keycloak 也支持单点登出(SLO)。当用户从一个应用登出时,Keycloak 可以将登出操作传播到所有共享同一 SSO 会话的其他应用,所有活动会话同时终止。
支持的协议
Keycloak 支持三大主流身份和授权协议:
OpenID Connect (OIDC)
OpenID Connect 是构建在 OAuth 2.0 之上的现代身份层,是大多数新应用推荐使用的协议。
关键概念:
Keycloak 支持的常见 OIDC 流程:
- 授权码流程:服务器端 Web 应用的标准流程。客户端用授权码换取令牌。
- 带 PKCE 的授权码流程:推荐用于单页应用(SPA)和移动应用。增加代码挑战以防止截获攻击。
- 客户端凭据流程:用于无用户参与的机器对机器(M2M)通信。
- 设备授权流程:用于输入受限设备(智能电视、物联网设备)。
OAuth 2.0
OAuth 2.0 是一种授权框架,允许应用程序获取对第三方服务用户账户的有限访问权限。Keycloak 在 OAuth 2.0 流程中充当授权服务器。
Keycloak 支持所有标准 OAuth 2.0 授权类型:
SAML 2.0
安全断言标记语言(SAML)2.0 是一种基于 XML 的协议,广泛用于企业身份联合。Keycloak 既支持作为服务提供商(SP),也支持作为身份提供商(IdP)。
Keycloak 中常见的 SAML 使用场景:
- 集成使用 SAML 的企业身份提供商(如 Active Directory Federation Services、Azure AD)。
- 为仅支持 SAML 的传统企业应用提供 SSO。
协议选择指南
令牌生命周期
Keycloak 发放有时间限制的令牌。令牌寿命可针对每个 Realm 进行配置:
短生命周期的访问令牌降低了令牌被盗用的风险。应用应使用刷新令牌透明地获取新的访问令牌。