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

Angular SPA令牌调用Graph API遇AADSTS50013签名验证失败

问题描述

我有一个Angular单页应用(SPA),已通过示例项目成功生成客户端令牌。现在需要将该令牌发送至Web API,通过On-Behalf-Of(OBO)流程调用Microsoft Graph API获取用户信息,代码如下:

var scopes = new[] { "User.Read" };
var tenantId = "xxxx";
var clientId = "xxxx";
var clientSecret = "xxxx";
var token = "token_obtained_from_angular_app";
var onBehalfOfCredential = new OnBehalfOfCredential(tenantId, clientId, clientSecret, token);
var tokenRequestContext = new TokenRequestContext(scopes);
var token2 = onBehalfOfCredential.GetTokenAsync(tokenRequestContext, new CancellationToken()).Result.Token;
var graphClient = new GraphServiceClient(onBehalfOfCredential, scopes);
var user = await graphClient.Me.GetAsync();

但持续收到错误:

AADSTS50013: Assertion failed signature validation. [Reason - Key was found, but use of the key to verify the signature failed., Thumbprint of key used by client: 'xxxx', Found key 'Start=02/08/2024 17:02:53, End=02/08/2029 17:02:53', Please visit the Azure Portal, Graph Explorer or directly use MS Graph to see configured keys for app Id '00000000-0000-0000-0000-000000000000']. Trace ID: xxxx Correlation ID: xxxx Timestamp: 2024-03-18 11:00:00Z

当前仅创建了一个SPA类型的Azure AD应用,且该令牌在Postman中调用Me API可正常获取用户信息,但通过GraphServiceClient调用失败。请问我遗漏了什么配置?

解决方案
  • 需创建两个独立的Azure AD应用:
    一个是已有的SPA客户端应用,另一个必须是Web API类型的服务端应用。OBO流程的核心是令牌从SPA客户端颁发给你的Web API,再由Web API代表用户请求Graph API的令牌,单个SPA应用无法完成完整的OBO流程。

  • 配置Web API应用的信任与权限:

    1. 为Web API应用添加Microsoft Graph的User.Read委托权限,并完成管理员同意(按需操作)。
    2. 在Web API应用的API权限设置中,添加对SPA客户端应用的授权,允许SPA调用该Web API。
    3. 在Web API应用的"公开API"页面设置应用ID URI,确保SPA获取的令牌受众(aud字段)指向这个URI,而非Graph API地址。
  • 修正代码中的凭据参数:
    代码里的clientId和clientSecret必须是Web API应用的凭据,而非SPA应用的。SPA属于公共客户端,本身没有客户端密钥,你当前使用SPA的凭据调用OBO流程,会导致令牌签名验证不匹配,触发报错。

  • 确认令牌受众正确性:
    从SPA获取的令牌,其aud值必须是你的Web API应用ID URI。Postman能直接调用Graph API是因为你使用的令牌受众是Graph API,但OBO流程要求令牌先发给你的Web API,再由Web API换取Graph的令牌。

内容的提问来源于stack exchange,提问作者K V Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:03:33