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

通过AzureAD实现Laravel应用到第三方网站的SSO流程咨询

流程问题与修正方案

你的现有流程存在关键逻辑错误和安全隐患,以下是问题拆解与正确实现方案:

核心问题点

  • 步骤2的用户同步逻辑冗余:不需要给同步到Azure AD的用户生成随机密码,Azure AD支持无密码的用户身份关联(可通过SCIM API或手动创建用户,标记为禁用交互式登录),第三方OIDC网站仅需确认用户在Azure AD租户中存在并关联到对应应用即可。
  • 步骤3的ID Token获取方式错误:服务账户(客户端凭证模式)仅能获取自身的访问令牌,无法直接生成其他用户的ID Token。ID Token是用户身份的专属凭证,必须通过代表用户的授权流程获取,而非服务端直接代生成。
  • 步骤4的令牌传递方式不安全:直接通过表单POST传递ID Token易被拦截,且不符合OIDC标准流程。

正确实现流程

前置准备

  • 在Azure AD中为你的Laravel应用注册企业应用,获取客户端ID、客户端密钥,配置重定向URI(指向Laravel应用的回调地址)。
  • 确保第三方网站的Azure AD应用已将你的Laravel应用配置为可信身份提供者,或两个应用处于同一Azure AD租户下(若第三方允许),完成跨租户访问配置。
  • 将自有数据库中的用户核心信息(邮箱、姓名等)同步到Azure AD租户,保存用户的Azure Object ID到自有数据库(此步骤保留,但无需生成密码)。

执行流程

  1. 已登录的Laravel用户点击SSO按钮后,Laravel应用构造授权请求,跳转至Azure AD授权端点,携带以下参数:

    • client_id:Laravel应用在Azure AD的客户端ID
    • response_type=code:采用OIDC标准推荐的授权码流程
    • redirect_uri:预先配置的Laravel回调地址
    • scope=openid email profile:获取用户身份所需的权限范围
    • state:随机生成的防CSRF字符串,存储到用户会话中
    • login_hint:用户的Azure AD邮箱(从自有数据库关联信息中获取),让Azure AD自动跳过登录账户选择界面
  2. Azure AD验证用户身份(若用户此前登录过Azure AD,可通过无缝SSO自动完成验证,无需重复输入密码),随后将授权码返回至Laravel的回调地址。

  3. Laravel应用使用授权码、客户端ID、客户端密钥,调用Azure AD令牌端点,获取用户的ID Token和访问令牌。

  4. Laravel应用通过OIDC标准方式传递ID Token至第三方网站:

    • 跳转至第三方网站的OIDC回调地址,携带id_token_hint参数传递ID Token;或让第三方网站直接通过授权码流程从Azure AD获取令牌(更安全)。
  5. 第三方网站验证ID Token的签名、有效期、受众(aud)、发行方(iss)等字段,确认用户身份后完成登录。

额外注意事项

  • 全程启用HTTPS:所有OIDC流程请求必须通过HTTPS传输,防止令牌被拦截篡改。
  • 严格验证令牌:Laravel应用和第三方网站都要对ID Token的有效性进行全面校验,避免身份伪造。
  • 会话状态管控:Laravel应用需维护用户会话,确保仅已登录用户可发起SSO请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:13:17