OpenID Connect 下单点登录(SSO)工作机制及相关参数使用问题咨询
OpenID Connect 单点登录(SSO)相关问题解答
1. OpenID Connect SSO 工作原理
基于OIDC的SSO核心是通过中心化的授权服务器统一完成用户身份验证,多个信任该授权服务器的业务系统无需单独处理用户登录逻辑,整体流程如下:
- 用户首次访问业务系统(RP,依赖方)时,业务系统检测到用户未登录,将用户重定向到OIDC授权服务器的授权端点,携带客户端标识、回调地址、作用域(必须包含
openid)等参数 - 授权服务器验证用户身份,若用户未登录则展示登录页让用户完成登录
- 授权服务器根据请求类型返回授权码(授权码流程)或直接返回ID Token等(隐式流程)给业务系统的回调地址
- 业务系统拿到授权码后向授权服务器的令牌端点兑换ID Token、Access Token等凭证,解析ID Token获取用户身份信息,完成本地登录状态创建
- 当用户访问其他对接同个授权服务器的业务系统时,重复上述重定向流程时,授权服务器可直接识别用户已登录的状态,无需用户再次输入账号密码,直接返回授权凭证给新的业务系统,实现跨系统单点登录
2. 实现过程中Cookie的使用情况
3.1.2.3. 授权服务器对终端用户进行身份验证
授权服务器用于验证终端用户身份的方法(例如用户名和密码、会话cookie等)不在本规范的涵盖范围内。
正如OIDC规范明确说明的,身份验证方法本身不受规范约束,实际工业界实现中几乎都会用到Cookie:授权服务器会在用户首次登录完成后,给用户浏览器下发属于授权服务器域名的会话Cookie,记录用户的登录状态,后续用户被其他业务系统重定向到授权服务器时,浏览器会自动携带该Cookie,授权服务器识别到有效会话就会跳过登录步骤,这是OIDC SSO能实现免重复登录的核心依赖。
业务系统侧也可以自行下发Cookie记录用户在本站的登录状态,不属于规范要求的强制内容。
3. id_token_hint参数的使用场景
该参数是OIDC规范明确定义的可选请求参数,会在两类常见流程中使用:
- 授权请求阶段:业务系统将之前获取到的用户ID Token作为
id_token_hint参数传给授权服务器,用于提示授权服务器当前用户可能的身份,授权服务器可基于该参数做优化,比如发现当前登录用户和id_token_hint对应的用户不一致时,提示用户切换账号,或者直接静默完成身份匹配 - 登出流程阶段:调用授权服务器的登出端点时,通常要求携带
id_token_hint参数,用于标识要登出的用户身份,授权服务器验证凭证有效后会清除对应的会话Cookie,实现单点登出
内容的提问来源于stack exchange,提问作者whowhenhow
相关产品推荐
相关产品推荐

