使用 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 - 解决方案
所以总结修复:
- 调用
AcquireTokenForClient
时请求的范围应该包括{Application ID Uri}/.default
- 在 EasyAuth 配置中,
Allowed Token Audiences
也需要设置为 Application ID Uri
如果要调用启用easy auth的Azure API应用,请参考以下步骤
- 获取您用于启用简易身份验证的 AD 应用程序的
Application ID URI
一个。在 Azure 门户 菜单中,select Azure Active Directory 或搜索 select Azure Active来自任意页面的目录。
b。 Select 应用程序注册 > 拥有的应用程序 > 查看此目录中的所有应用程序。 Select 您的网络应用程序名称,然后是 select 概览 。
- 代码
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);
详情请参考。
我有一个使用 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 - 解决方案
所以总结修复:
- 调用
AcquireTokenForClient
时请求的范围应该包括{Application ID Uri}/.default
- 在 EasyAuth 配置中,
Allowed Token Audiences
也需要设置为Application ID Uri
如果要调用启用easy auth的Azure API应用,请参考以下步骤
- 获取您用于启用简易身份验证的 AD 应用程序的
Application ID URI
一个。在 Azure 门户 菜单中,select Azure Active Directory 或搜索 select Azure Active来自任意页面的目录。
b。 Select 应用程序注册 > 拥有的应用程序 > 查看此目录中的所有应用程序。 Select 您的网络应用程序名称,然后是 select 概览 。
- 代码
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);
详情请参考