我有一个使用Azure的ASP.NET WebAPICore3.1应用程序。我使用Microsoft.Identity.Web库。我把它设成这样:
public void ConfigureServices(IServiceCollection services)
{
Trace.TraceInformation("Configuring services");
services.AddProtectedWebApi(Configuration, subscribeToJwtBearerMiddlewareDiagnosticsEvents: true
)
.AddProtectedWebApiCallsProtectedWebApi(Configuration)
.AddInMemoryTokenCaches();
services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
.......
}我的应用程序是多租户的,所以我需要取消验证对象。最近,我将库作为一个单独的项目使用,以便在其源代码中对其进行更改:
ValidateIssuer = false但是目前我使用nuget的库,所以我不能简单地更改源代码来避免对受众(发行者)的验证。
我应该如何配置库来实现它?
发布于 2020-05-08 06:19:28
对于多租户应用程序,请将ValidateIssuer设置为false。这意味着应用程序将验证发行者。请参阅此article。
在JwtBearerEvents.TokenValidated事件中验证令牌颁发者。发行人是在"iss“索赔中发出的。
禁用颁发者验证是可能的,您可以引用下面的代码:
public void Configure(string name, JwtBearerOptions options)
{
options.Audience = AzureOptions.ClientId;
options.TokenValidationParameters = new TokenValidationParameters{
ValidateIssuer = false
};
options.Events = new JwtBearerEvents()
{
OnTokenValidated = (context) =>
{
if(!context.SecurityToken.Issuer.StartsWith("https://sts.windows.net/"))
throw new SecurityTokenValidationException();
return Task.FromResult(0);
}
};
options.Authority = $"{AzureOptions.Instance}{AzureOptions.TenantId}";
}发布于 2020-05-08 03:09:02
我认为您可以注入自己的验证代码来处理多租户验证,而不是试图禁用验证。就像这样
services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options => {
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}"
};
// Instead of using the default validation (validating against a single tenant,
// as we do in line-of-business apps),
// we inject our own multitenant validation logic (which even accepts both v1 and v2 tokens).
options.TokenValidationParameters.IssuerValidator = AadIssuerValidator.GetIssuerValidator(options.Authority).Validate;; });发布于 2020-07-09 06:47:25
通过使用Microsoft.Identity.Web库,可以将ValidateIssuer设置为false,如下所示:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddProtectedWebApi(options =>
{
options.TokenValidationParameters.ValidateIssuer = false;
},options => { Configuration.Bind("AzureAd", options); });访问令牌包含aud (受众)和iss (Issuer)两个单独的声明。
受众是令牌的预定接收方。用户是Azure门户和中分配的API的应用程序ID,不建议停止验证受众。
https://stackoverflow.com/questions/61662703
复制相似问题