我有一个使用 Azure AD EasyAuth 进行身份验证的 Azure 应用服务。
我正在尝试使用 C# 和 MSAL.NET (Microsoft.Identity.Client) 从另一个应用服务发送请求。
验证码如下所示
var app = ConfidentialClientApplicationBuilder
.Create(config.ClientId) // The Client ID in the App Registration connected to the App Service
.WithClientSecret(config.ClientSecret)
.WithAuthority(new Uri(config.Authority)) // https://login.microsoftonline.com/tenant.onmicrosoft.com/v2.0
.WithTenantId(config.TenantId) // Tenant Id Guid
.Build();
// Used Scopes: ["https://graph.microsoft.com/.default"]
var credentials = await app.AcquireTokenForClient(config.Scopes)
.ExecuteAsync(cancellationToken);
我成功获得了不记名令牌,但是当我尝试使用注入标头的令牌调用应用服务时,我得到 401 和You do not have permission to view this directory or page.
:(
更新1:
我尝试了@Jim Xu 的回答,它仍然给我 401。它返回一个www-authenticate
具有以下值的标题
资源id与App Reg中的ClientId相同
更新 2 - 解决方案
所以总结一下修复:
- 调用时请求的范围
AcquireTokenForClient
应包括{Application ID Uri}/.default
- 在 EasyAuth 配置中,
Allowed Token Audiences
也需要设置Application ID Uri
为