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

PHP工单表单对接AD Azure实现提交人身份识别的简易方案咨询

Azure AD 集成PHP工单表单最简身份验证方案

核心逻辑

采用被动身份校验+提交时静默鉴权逻辑,完全不改动原有表单访问流程,仅在用户提交工单环节触发身份验证,符合不需要强制提前登录的要求。

前置准备

  • 在Azure AD后台注册单页应用,仅需配置重定向URI为你的工单表单提交页地址,生成对应的客户端ID、租户ID即可
  • 服务端安装Azure AD官方PHP轻量SDK,无需额外部署独立身份服务

实现步骤

1. 前端表单改造

在原有表单的提交事件中增加鉴权逻辑:优先检测用户当前是否有Azure AD有效登录态,有则直接提取身份信息附加到提交参数;无则弹窗引导用户完成1次Azure AD快捷登录,登录完成后自动带回身份信息再提交工单。
核心代码示例:

// 提前把MSAL-browser SDK下载到本地静态资源目录引用即可
const msalConfig = {
  auth: {
    clientId: "Azure AD注册应用生成的客户端ID",
    authority: "https://login.microsoftonline.com/你的Azure AD租户ID",
    redirectUri: "你的工单表单页面地址"
  }
};
const msalInstance = new msal.PublicClientApplication(msalConfig);

// 表单提交拦截逻辑
document.querySelector('#ticketForm').addEventListener('submit', async (e) => {
  e.preventDefault();
  try {
    // 静默获取账户信息
    let account = msalInstance.getAllAccounts()[0];
    if (!account) {
      const res = await msalInstance.ssoSilent({scopes: ["User.Read"]});
      account = res.account;
    }
    // 提取用户身份字段附加到表单,同步传入鉴权令牌
    document.querySelector('#submitterEmail').value = account.username;
    document.querySelector('#submitterName').value = account.name;
    document.querySelector('#msalAccessToken').value = res.accessToken;
    // 提交表单
    e.target.submit();
  } catch (err) {
    // 静默获取失败,引导弹窗登录
    const loginRes = await msalInstance.loginPopup({scopes: ["User.Read"]});
    document.querySelector('#submitterEmail').value = loginRes.account.username;
    document.querySelector('#submitterName').value = loginRes.account.name;
    document.querySelector('#msalAccessToken').value = loginRes.accessToken;
    e.target.submit();
  }
})

2. 服务端身份校验

PHP后端接收提交参数时增加二次校验,避免用户伪造身份信息:

<?php
use Microsoft\Graph\Graph;
use Microsoft\Graph\Model;

$accessToken = $_POST['msalAccessToken'];
$submitterEmail = $_POST['submitterEmail'];

// 调用Azure AD接口校验令牌有效性,获取用户真实信息
$graph = new Graph();
$graph->setAccessToken($accessToken);
$user = $graph->createRequest("GET", "/me")
              ->setReturnType(Model\User::class)
              ->execute();

// 比对前端提交的信息和接口返回的真实信息
if($user->getMail() === $submitterEmail) {
  // 校验通过,关联用户身份和工单信息存入数据库
  saveTicket($_POST, $user->getMail(), $user->getDisplayName());
} else {
  http_response_code(403);
  echo "身份验证失败,请重试";
}
?>

方案特点

  • 改造成本极低:原有表单访问逻辑完全不需要调整,仅新增提交环节的鉴权步骤
  • 体验符合要求:用户不需要提前登录,仅第一次提交工单时需要1次Azure AD授权,后续提交均为静默鉴权无感知
  • 安全性有保障:服务端二次校验身份,完全避免伪造提交人信息的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:15:02