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

使用MSAL2登录后在服务器端验证用户身份的技术问询

解决Azure AD令牌后端验证(支持Teams外访问)的方案

嘿,你已经找对方向了——用客户端MSAL2获取的令牌在服务器端交换一个新的访问令牌,这正是Azure AD的On-Behalf-Of(OBO)令牌交换流程,完美适配你既要支持多端(Teams外可用)又要后端安全验证、防止冒充的需求。下面给你拆解具体实现步骤:

一、先搞定Azure AD应用配置

这是基础,配置错了后面流程肯定跑不通:

  • 客户端应用(前端):添加对后端API的委派权限,并确保权限状态是“已授予”;同时在应用注册的“API权限”里,确认该权限允许被OBO流程使用(一般委派权限都支持)。
  • 后端应用(API):
    1. 在“公开API”里定义自己的范围(比如access_as_user),供客户端请求权限。
    2. 启用“允许跨租户访问”(如果你的应用需要支持外部租户或多端场景)。
    3. 确保后端应用有对应的客户端密钥或证书(用来在OBO流程中证明自己的身份)。

二、客户端传对令牌给后端

客户端用MSAL2登录后,会拿到两个关键令牌:

  • ID令牌:用来前端展示用户信息(比如姓名、邮箱),不要传给后端做验证。
  • 访问令牌:目标受众(aud)是你的后端API(或指定的资源),这才是需要传给后端的令牌。

比如在前端MSAL2中,获取访问令牌的代码大概是这样:

const accessTokenRequest = {
  scopes: ["api://<你的后端API应用ID>/access_as_user"]
};

const response = await msalInstance.acquireTokenSilent(accessTokenRequest);
// 把response.accessToken传给后端接口

三、后端执行OBO令牌交换

后端用MSAL(对应你用的语言,比如MSAL.NET、MSAL Node.js)来发起OBO请求,交换出一个后端可用的访问令牌,这个令牌可以用来验证用户权限,甚至调用其他Azure服务。

举个MSAL.NET的例子:

// 初始化后端的机密客户端应用
var confidentialClient = ConfidentialClientApplicationBuilder
    .Create("<后端应用Client ID>")
    .WithClientSecret("<后端应用Client Secret>") // 或用证书
    .WithAuthority(new Uri("https://login.microsoftonline.com/<你的租户ID>"))
    .Build();

// 从前端请求中拿到客户端传来的访问令牌
string userAccessToken = HttpContext.Request.Headers["Authorization"].ToString().Replace("Bearer ", "");

// 定义后端需要的权限范围
string[] scopes = new string[] { "api://<你的后端API应用ID>/access_as_user" };

// 执行OBO交换
var result = await confidentialClient.AcquireTokenOnBehalfOf(scopes, new UserAssertion(userAccessToken))
    .ExecuteAsync();

// 交换得到的result.AccessToken就是后端可用的验证令牌

四、后端验证令牌权限

拿到交换后的令牌后,你可以:

  1. 校验令牌有效性:用MSAL的内置方法或Azure AD的令牌验证端点,检查令牌的 issuer(发行方)、aud(受众)、exp(过期时间)等字段,确保令牌合法未篡改。
  2. 提取权限声明:从令牌的roles或scp字段中,获取用户被授予的权限,判断是否允许访问对应功能(比如某些接口只允许管理员角色访问)。

五、额外注意事项

  • 令牌缓存:后端可以缓存OBO令牌,避免频繁向Azure AD发起请求,提升性能。
  • 多租户场景:如果你的应用支持多租户,要动态获取租户ID(可以从客户端令牌的tid字段提取),而不是硬编码。
  • 权限最小化:只请求必要的权限,避免过度授权,提升安全性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:48:02