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
相关产品推荐
相关产品推荐

