我的应用程序中具有jwt身份验证, 这就是我在startup.cs类中实现的方式
services.AddAuthentication()
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII
.GetBytes(Configuration.GetSection("AppSettings:Token").Value)),
ValidateIssuer = false,
ValidateAudience = false
};
});
内部配置方法
app.UseAuthentication();
在“控制器使用的属性”中
[Authorize]
普通身份验证工作正常。 我想在进行身份验证时检查一些自定义内容,而又不会丢失默认的身份验证过程,这意味着我不想编写全新的身份验证方法。
答案 0 :(得分:1)
您应该能够仅通过链接身份验证方案来构建默认身份验证。
首先,您可以实现自定义身份验证处理程序:
public class CustomAuthenticationHandler : AuthenticationHandler<CustomAuthHandlerOptions>
{
public CustomAuthenticationHandler(IOptionsMonitor<CustomAuthHandlerOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock)
{
}
protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
//Write custom logic here
return await Context.AuthenticateAsync(Scheme.Name);
}
}
public class CustomAuthHandlerOptions : AuthenticationSchemeOptions
{
public string MyCustomOptionsProp { get; set; }
}
然后您可以将方案添加到AuthenticationBuilder
:
services.AddAuthentication()
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII
.GetBytes(Configuration.GetSection("AppSettings:Token").Value)),
ValidateIssuer = false,
ValidateAudience = false
};
})
.AddScheme<CustomAuthHandlerOptions, CustomAuthenticationHandler>("CustomAuthJwt", options =>
{
options.MyCustomOptionsProp = "Custom Value";
});
我还没有实际测试过,但是我知道这种方法的想法是可行的,因为它已经在IdentityServer4.AccessTokenValidation Nuget Package中实现了。我的例子就是最简单的例子。