You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Azure AD的OpenID单点登录(SSO)流程及疑问咨询

OpenID对接Azure AD的SSO流程修正与疑问解答

流程核心角色澄清

首先明确:你场景中的我方WebApp是依赖方(RP),Azure AD是身份提供商(IDP),原始流程的角色描述存在混淆,先修正基础逻辑。

原始流程疏漏修正

针对你列出的流程,核心错误与修正点如下:

  1. 步骤1修正:用户是从我方WebApp(RP)发起认证请求,跳转至Azure AD(IDP)的授权端点,而非从我方系统跳转至供应商网站作为RP。
  2. 步骤2修正:RP调用IDP授权端点时,禁止携带client_secret(该密钥仅用于后端调用令牌端点,前端暴露会导致泄露);且Azure AD中application_id与client_id为同一参数,无需重复传递。授权请求需携带的参数为:client_id、redirect_uri、response_type=code、scope(如openid profile)、state(防CSRF攻击)。
  3. 步骤6修正:Access Token与ID Token是IDP直接返回给RP后端的,不会通过重定向URI传递——重定向URI仅用于返回授权码,令牌请求是RP后端与IDP的服务器端交互。

疑问解答

疑问1:用户进入授权端点后,是否需输入凭证?还是SSO已隐式完成验证?

  • 若用户浏览器中已有有效的Azure AD会话Cookie(比如之前登录过其他Azure AD集成应用),Azure AD会自动完成SSO,无需再次输入账号密码;
  • 若用户无Azure AD会话或会话已过期,则必须输入Azure AD的账号密码完成认证;
  • 若为用户首次授权该RP,还需根据Azure AD的配置,完成权限同意步骤。

疑问2:获取Access Token是否无需在请求中携带用户信息?RP是否直接从浏览器获取相关信息?需发送哪些信息?

  • 获取Access Token的请求是RP后端向IDP令牌端点发起的服务器端POST请求,不需要携带用户信息——授权码已经绑定了用户的认证上下文,IDP可通过授权码关联到对应的用户;
  • RP绝对不能从浏览器直接获取用户信息来换取令牌,必须使用授权码+自身客户端凭证完成兑换;
  • 令牌端点请求必须携带的参数:
    • grant_type=authorization_code(固定值,指定授权码模式)
    • code:之前获取的有效授权码(一次有效)
    • redirect_uri:必须与授权请求时的redirect_uri完全一致
    • client_id:RP的客户端ID
    • client_secret:RP的客户端密钥(仅适用于WebApp这类机密客户端)

正确的授权码模式流程(对接Azure AD)

  • 用户访问我方WebApp,触发未登录状态下的认证逻辑;
  • RP后端生成认证请求,引导浏览器跳转至Azure AD授权端点,携带合规参数;
  • Azure AD根据用户会话状态,自动完成SSO或要求用户输入凭证;
  • 认证通过后,Azure AD将授权码通过重定向URI返回给RP前端,前端把授权码传给后端;
  • RP后端携带授权码与客户端凭证,向Azure AD令牌端点发起请求;
  • Azure AD验证通过后,返回Access Token、ID Token给RP后端;
  • RP后端解析ID Token获取用户身份信息,完成登录与SSO流程。

内容的提问来源于stack exchange,提问作者Kenzo_Gilead

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:45:33