1

我有一个使用 Azure AD EasyAuth 进行身份验证的 Azure 应用服务。 使用 AD 配置 AppService

使用 AD 2 配置 AppService

我正在尝试使用 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具有以下值的标题 www-验证值

资源id与App Reg中的ClientId相同

更新 2 - 解决方案

所以总结一下修复:

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

1 回答 1

1

如果您想调用启用简易身份验证的 Azure API 应用程序,请参考以下步骤

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

一个。在Azure 门户菜单中,选择Azure Active Directory或从任何页面搜索并选择Azure Active Directory 。

湾。选择应用程序注册>拥有的应用程序>查看此目录中的所有应用程序。选择您的 Web 应用名称,然后选择Overview在此处输入图像描述

  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);

更多详情,请参阅此处

于 2021-02-24T05:05:07.513 回答