使用 MSAL.NET 获取不记名令牌以使用 EasyAuth 访问应用服务

Get bearer token with MSAL.NET to access App Service with EasyAuth

我有一个使用 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);

我成功获得了不记名令牌,但是当我尝试使用注入到 headers 的令牌调用应用程序服务时,我得到了 401 和 You do not have permission to view this directory or page.:(

更新 1:

我尝试了@Jim Xu 的回答,它仍然给我 401。它 returns 具有以下值的 www-authenticate header

资源id与App Reg中的ClientId相同

更新 2 - 解决方案

所以总结修复:

  1. 调用AcquireTokenForClient时请求的范围应该包括{Application ID Uri}/.default
  2. 在 EasyAuth 配置中,Allowed Token Audiences 也需要设置为 Application ID Uri

如果要调用启用easy auth的Azure API应用,请参考以下步骤

  1. 获取您用于启用简易身份验证的 AD 应用程序的Application ID URI

一个。在 Azure 门户 菜单中,select Azure Active Directory 或搜索 select Azure Active来自任意页面的目录

b。 Select 应用程序注册 > 拥有的应用程序 > 查看此目录中的所有应用程序。 Select 您的网络应用程序名称,然后是 select 概览

  1. 代码
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: ["{Application ID URI}/.default"]
var credentials = await app.AcquireTokenForClient("{Application ID URI}/.default")
    .ExecuteAsync(cancellationToken);

详情请参考