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 流程:
- Authorization Code Flow:服务器端 Web 应用的标准流程。客户端用授权码换取令牌。
- Authorization Code Flow with PKCE:推荐用于单页应用(SPA)和移动应用。增加了代码挑战以防止截取攻击。
- Client Credentials Flow:用于无用户参与的机器对机器(M2M)通信。
- Device Authorization Flow:用于输入受限设备(智能电视、物联网设备)。
OAuth 2.0
OAuth 2.0 是一种授权框架,允许应用获取对第三方服务用户账户的有限访问权限。Keycloak 在 OAuth 2.0 流程中充当授权服务器。
Keycloak 支持所有标准 OAuth 2.0 授权类型:
SAML 2.0
安全断言标记语言(SAML)2.0 是一种基于 XML 的协议,广泛用于企业身份联合。Keycloak 支持作为服务提供者(SP)和身份提供者(IdP)使用 SAML。
Keycloak 中常见的 SAML 使用场景:
- 集成使用 SAML 的企业身份提供者(如 Active Directory Federation Services、Azure AD)。
- 为仅支持 SAML 的传统企业应用提供 SSO。
协议选择指南
令牌生命周期
Keycloak 发放有时间限制的令牌。令牌的有效期可针对每个 Realm 进行配置:
短生命周期的访问令牌降低了令牌被盗用的风险。应用应使用刷新令牌透明地获取新的访问令牌。