Azure active directory 使用AAD令牌保护.Net Core 3 Web API
由于一些技术限制,我们在用户登录时进行用户名/密码AAD身份验证 用户将在自定义登录页面和应用程序调用中输入用户名和密码 我计划使用返回的令牌调用另一个Web API应用程序(也连接到同一个AAD)。在Web API应用程序中,我执行了以下操作:Azure active directory 使用AAD令牌保护.Net Core 3 Web API,azure-active-directory,asp.net-core-webapi,Azure Active Directory,Asp.net Core Webapi,由于一些技术限制,我们在用户登录时进行用户名/密码AAD身份验证 用户将在自定义登录页面和应用程序调用中输入用户名和密码 我计划使用返回的令牌调用另一个Web API应用程序(也连接到同一个AAD)。在Web API应用程序中,我执行了以下操作: 在startupservices.AddAuthentication(AzureADDefaults.jwtbeareraauthenticationscheme)中添加了以下代码 在my appsettings.json文件中包括以下设置 “Azur
services.AddAuthentication(AzureADDefaults.jwtbeareraauthenticationscheme)中添加了以下代码代码>
“AzureAd”:{
“实例”:https://login.microsoftonline.com/",
“ClientId”:“,
“租户”:”
}
授权:持票人
。Web API返回
承载错误=“无效令牌”,错误描述=“签名无效”
我的问题是
从您提供的文档中,您正在使用MSAL在Azure AD V2.0端点中使用资源所有者流获取访问令牌 在验证Azure AD V2.0发布的访问令牌时,您应该将
/V2.0
添加到授权:
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}"
};
});
services.Configure(AzureADDefaults.JwtBearerAuthenticationScheme,选项=>
{
//这是一个Microsoft identity platform web API。
选项。权限+=“/v2.0”;
//web API接受客户机ID(options.acquisition)和API://{ClientID}作为访问群体。
options.TokenValidationParameters.Validudiences=new[]
{
选择,观众,
$“api://{options.viewer}”
};
});
我在我的网站上进行了测试,效果很好,您可以参考以下步骤:
1.在azure ad中注册Webapi应用程序
2.单击公开API
和添加范围
,例如网络阅读
3.单击清单
,将accessTokenAcceptedVersion
更改为2.0
4.在visual studio webapi中配置服务
:
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}"
};
});
希望它能帮助您。您能检查一下应用程序是否在AAD中分配了任何角色吗?谢谢您的回复。我添加了设置,现在我得到另一个错误“承载错误:无效令牌”。。但每次我打电话时,我都会重新生成访问令牌,但仍然会得到错误。@文浩,您新错误的详细错误消息是什么?初始错误消息是Bearer error=“invalid\u token”,错误描述=“签名无效”,更改后,错误消息是Bearer error=“invalid\u token”。我能看到全部错误吗?我计划浏览整个教程,看看我的设置和教程设置之间的区别()使用fiddler跟踪响应以找到内部错误消息。
string[] scopes = new string[] { "api://1890e822-xxxxxxxxxxxxxxxx/webread" };