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

如何使用Azure Active Directory实现PHP应用的SSO单点登录认证

Azure AD SSO 前端接入实操指南

前置准备

首先找学校的Azure AD管理员确认以下信息:

  • 已在Azure AD中注册好的应用核心参数:客户端ID(clientId)、租户ID(tenantId)
  • 重定向URI白名单:本地开发需要添加http://localhost:对应端口号,生产环境要和你前端部署的域名完全匹配
  • 应用平台类型必须设置为单页应用(SPA),不要选择Web应用,否则会出现跨域、授权码校验失败等问题

接入步骤

1. 选择认证库

微软官方推荐使用MSAL.js库实现认证,不要使用已停止维护的ADAL.js:

  • 原生JS/无框架场景:使用@azure/msal-browser v2及以上版本
  • 框架场景直接使用对应封装包:React用@azure/msal-react、Vue用@azure/msal-vue、Angular用@azure/msal-angular

2. 基础配置示例

以原生JS场景为例,首先安装依赖:
npm install @azure/msal-browser

初始化MSAL实例:

import { PublicClientApplication } from "@azure/msal-browser";

const msalConfig = {
  auth: {
    clientId: "替换为你们的客户端ID",
    authority: "https://login.microsoftonline.com/替换为你们的租户ID",
    redirectUri: window.location.origin // 必须和注册的重定向URI完全一致
  },
  cache: {
    cacheLocation: "sessionStorage", // 需要持久化登录态可以改为localStorage
    storeAuthStateInCookie: false // 仅需要兼容IE时开启
  }
};

const msalInstance = new PublicClientApplication(msalConfig);

3. 实现登录逻辑

两种登录方式按需选择:

  • 弹窗登录:调用msalInstance.loginPopup(),适合PC端场景,不会打断当前页面状态
  • 重定向登录:调用msalInstance.loginRedirect(),适合移动端/弹窗易被拦截的场景,登录成功后需要调用msalInstance.handleRedirectPromise()处理回调结果

4. 获取访问令牌

登录成功后通过以下方法获取调用后端API所需的access token:

const tokenRequest = {
  scopes: ["User.Read"] // 替换为你们应用实际需要的权限scope,比如后端API暴露的自定义权限
};

async function getAccessToken() {
  const currentAccount = msalInstance.getAllAccounts()[0];
  if (!currentAccount) throw new Error("用户未登录");
  
  try {
    // 优先静默获取token,无需用户交互
    const tokenRes = await msalInstance.acquireTokenSilent({
      ...tokenRequest,
      account: currentAccount
    });
    return tokenRes.accessToken;
  } catch (err) {
    // 静默获取失败时触发交互获取
    if (err.name === "InteractionRequiredAuthError") {
      const tokenRes = await msalInstance.acquireTokenPopup(tokenRequest);
      return tokenRes.accessToken;
    }
    throw err;
  }
}

5. 路由与权限控制

单页应用可以给需要登录的路由添加守卫:进入路由前判断msalInstance.getAllAccounts()是否有有效账号,无账号则跳转到登录逻辑。

6. 登出逻辑

调用msalInstance.logout()即可自动清空本地认证缓存,跳转至Azure AD统一登出页。

注意事项

  • 前端属于公开客户端,不要在代码中硬编码任何客户端密钥,单页应用接入不需要密钥,泄露会有安全风险
  • 权限scope按需申请,不要申请不必要的高权限
  • 上线前务必确认生产环境域名已经添加到Azure AD应用的重定向URI白名单中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:36:03