我有一个webapi,我需要进行身份验证,我在V1中使用AAD进行身份验证。
我已经完成所有设置,邮递员我可以获得一个令牌,但是,每当我尝试向api发出请求时,它都会给我错误401:
承载错误=" invalid_token",error_description ="签名无效"
这是ConfigurationServices上的代码:
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddAzureAdBearer(options => Configuration.Bind("AzureAd", options));
这是为azure身份验证生成的类:
public static AuthenticationBuilder AddAzureAdBearer(this AuthenticationBuilder builder)
=> builder.AddAzureAdBearer(_ => { });
public static AuthenticationBuilder AddAzureAdBearer(this AuthenticationBuilder builder, Action<AzureAdOptions> configureOptions)
{
builder.Services.Configure(configureOptions);
builder.Services.AddSingleton<IConfigureOptions<JwtBearerOptions>, ConfigureAzureOptions>();
builder.AddJwtBearer();
return builder;
}
private class ConfigureAzureOptions: IConfigureNamedOptions<JwtBearerOptions>
{
private readonly AzureAdOptions _azureOptions;
public ConfigureAzureOptions(IOptions<AzureAdOptions> azureOptions)
{
_azureOptions = azureOptions.Value;
}
public void Configure(string name, JwtBearerOptions options)
{
options.Audience = _azureOptions.ClientId;
options.Authority = $"{_azureOptions.Instance}{_azureOptions.TenantId}";
}
public void Configure(JwtBearerOptions options)
{
Configure(Options.DefaultName, options);
}
}
这里缺少什么?可以请帮忙吗?
谢谢
答案 0 :(得分:0)
正如pcdev在评论中所说,请确保将Authorization标头添加到所有请求中。
JWT令牌应分为三个部分,用点分隔。签名是第三部分。
发送的令牌答案 1 :(得分:0)
我有一个类似的问题,只使用了以下内容就可以了。
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);