【发布时间】:2021-02-11 07:33:28
【问题描述】:
我正在尝试使用 Azure AD 保护我的 Web Api。此应用程序将由控制台应用程序访问,并且令牌将从客户端 ID/秘密生成。我遵循了来自https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-aspnet-core-web-api 的快速入门。
获取客户端令牌并通过不记名身份验证标头发送后,出现错误
System.UnauthorizedAccessException:IDW10201:在不记名令牌中找不到范围或角色声明。
我正在使用此代码获取访问令牌:
public static async Task<string> GetAccessToken(string aadInstance, string aadTenant, string aadClientId, string aadClientSecret, string apiResourceId)
{
string authority = aadInstance.TrimEnd('/') + "/" + aadTenant;
var app = ConfidentialClientApplicationBuilder.Create(apiResourceId)
.WithClientId(aadClientId)
.WithClientSecret(aadClientSecret)
.WithAuthority(authority)
.Build();
var tokenrequest = app.AcquireTokenForClient(new string[] { "api://resourceid/.default" });
var tokenresult = await tokenrequest.ExecuteAsync();
return tokenresult.AccessToken;
}
我在 web api 中的启动代码如下所示:
public void ConfigureServices(IServiceCollection services)
{
JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration);
在启动后...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.UseOpenApi();
app.UseSwaggerUi3();
}
【问题讨论】:
标签: asp.net-core asp.net-web-api oauth-2.0 azure-active-directory