如何在点网核心中修改默认的本地JWT身份验证

时间:2019-01-02 18:06:42

标签: c# asp.net-core

我的应用程序中具有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]

普通身份验证工作正常。 我想在进行身份验证时检查一些自定义内容,而又不会丢失默认的身份验证过程,这意味着我不想编写全新的身份验证方法。

1 个答案:

答案 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中实现了。我的例子就是最简单的例子。