【发布时间】:2018-03-08 05:45:16
【问题描述】:
我有一个 webapi,我需要进行身份验证,我在 V1 中使用 AAD 进行此操作。
我已经设置好了,通过邮递员我可以获得一个令牌,但是,每当我尝试向 api 发出请求时,它都会给我错误 401:
Bearer error="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);
}
}
这里缺少什么?可以帮忙吗?
谢谢
【问题讨论】:
-
如何发送不记名令牌?应该有一个标题
Authorization Bearer <your token goes here>。还可以查看this answer,看看它是否对您的 API 配置有帮助。 -
是的,我有标题...
-
@HLourenco 你还记得你是否解决过这个问题吗?如果是这样,怎么做?我也有同样的问题...
-
@Gabriel Bourgault 我已经解决了这个问题,我想我所做的是,在 AAD 中我更改了我的应用程序的权限,从那时起,令牌一直有效,因为实体被识别跨度>
标签: .net asp.net-core asp.net-core-mvc azure-active-directory asp.net-core-2.0