由于一些技术上的限制,我们在用户登录时进行用户名/密码AAD认证。
用户将输入他们的用户名和密码到我们的自定义登录页面,我们的应用程序调用IPublicClientApplication.AcquireTokenByUsernamePassword。
我计划使用返回的令牌来调用另一个Web应用程序(也连接到同一个AAD)。在Web应用程序中,我执行了以下操作:
services.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme).AddAzureADBearer(options => Configuration.Bind("AzureAd", options));中添加了以下代码"AzureAd": { "Instance": "https://login.microsoftonline.com/", "ClientId": "<Application ID>", "TenantId": "<Tenant ID>" }然后,我使用Postman根据返回的令牌构造对Web的调用。我包括了Authorization: Bearer <JWT Token>。Web返回
无记名error="invalid_token",error_description=“签名无效”
我的问题是
发布于 2020-03-11 03:45:09
我在我的站点上进行了测试,它运行得很好,您可以参考以下步骤:
1.在蔚蓝广告中注册Webapi应用程序。
2.单击Expose an API和Add a scope,例如webread。

3.单击Manifest,将accessTokenAcceptedVersion更改为2.0。

4.在visual studio webapi ConfigureServices中
services.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme).AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme,
options =>
{
options.Authority += "/v2.0";
options.TokenValidationParameters.ValidAudiences = new[]
{
options.Audience,
$"api://{options.Audience}"
};
});5.在蔚蓝广告中注册客户端应用。
6.单击Authentication,将Default client type设置为Yes。

7.单击Api Permission>Add a permission,选择My APIs并选择以前注册的webapi。

8.在visual studio客户端应用程序中,使用webread设置作用域:
string[] scopes = new string[] { "api://1890e822-xxxxxxxxxxxxxxxx/webread" };希望它能帮到你。
发布于 2020-03-09 05:58:47
从您提供的文档中,您可以使用MSAL在Azure AD V2.0端点中使用资源所有者流获取访问令牌。
从文档中,在验证从AzureADV2.0发出的访问令牌时,应该将/v2.0添加到Authority:
services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
// This is a Microsoft identity platform web API.
options.Authority += "/v2.0";
// The web API accepts as audiences both the Client ID (options.Audience) and api://{ClientID}.
options.TokenValidationParameters.ValidAudiences = new []
{
options.Audience,
$"api://{options.Audience}"
};
});https://stackoverflow.com/questions/60585176
复制相似问题