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

Microsoft Entra可验证凭据管理API客户端凭据签发问题

解决Microsoft Entra可验证凭据管理API的客户端凭据问题

针对你遇到的两个错误,以下是具体的原因分析和解决方案:

1. 受众无效错误

错误提示API期望的受众是0135fd85-3010-4e73-a038-12560d2b58a9,6a8b4b39-c021-437c-b060-5a14a3fd65f3,你之前的请求错误地使用了角色ID(6a8b4b39开头的字符串)作为scope前缀,而正确的应该使用管理API的资源ID。

修正后的OAuth2令牌请求

使用旧的oauth2/token端点时,替换scope参数为resource(指定API的资源ID):

GET https://login.microsoftonline.com/<tenant_id>/oauth2/token

Query Params:
client_id=<client_id>
client_secret=<client_secret>
resource=0135fd85-3010-4e73-a038-12560d2b58a9
grant_type=client_credentials

2. 令牌无wids未授权错误

wids是用户角色的标识声明,客户端凭据流(应用身份)的令牌中不会包含该字段,API实际验证的是应用是否被分配了对应的角色权限。你之前的错误是因为scope未关联到正确的API资源,且需确保角色分配正确生效。

修正步骤:

  • 确认角色分配:在Azure门户的Microsoft Entra ID→角色和管理员中,找到「Verifiable Credentials Service Admin」角色,添加分配并选择你的应用注册,等待5-10分钟让分配生效。
  • 修正MSAL代码:使用API的资源URI作为scope,而不是角色ID:
var app = ConfidentialClientApplicationBuilder.Create("<client_id>")
       .WithClientSecret("<client_secret>")
       .WithAuthority(new Uri("https://login.microsoftonline.com/<tenant_id>"))
       .Build();

var result = await app.AcquireTokenForClient(new string[] { "https://verifiedid.did.msidentity.com/.default" }).ExecuteAsync();

Console.WriteLine("Access Token: {0}", result.AccessToken);

核心原因说明

  • 你混淆了角色ID和API资源ID:6a8b4b39开头的字符串是「Verifiable Credentials Service Admin」角色的ID,而0135fd85开头的是管理API的资源ID,获取令牌时必须关联到API资源ID才能让受众验证通过。
  • 客户端凭据流中,应用的权限通过roles声明体现,而非wids,正确配置scope和角色分配后,令牌会包含full_access的roles权限,API即可验证通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:51:03