asp.net核心身份 - 两种类型的jwt令牌

时间:2017-09-22 10:43:14

标签: asp.net-core jwt asp.net-core-identity

我只是想知道,是否可以为2个不同的受众配置JWT令牌?首先设置令牌到期日期,而第二个设置令牌失效日期。

我有以下JWT配置代码,但它仅适用于单个受众。

private void ConfigureSecurity(IServiceCollection services)
    {
        services.AddAuthentication()
            .AddCookie(cfg => cfg.SlidingExpiration = true)
            .AddJwtBearer(cfg =>
            {
                cfg.RequireHttpsMetadata = false;
                cfg.SaveToken = true;

                cfg.TokenValidationParameters = new TokenValidationParameters()
                {
                    ValidateIssuer = true,
                    ValidateAudience = true,
                    RequireExpirationTime = false,
                    ValidIssuer = Configuration["Tokens:Issuer"],
                    ValidAudience = Configuration["Tokens:Issuer"],
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:Key"])),
                };
            });

        services.AddAuthorization();
    }

1 个答案:

答案 0 :(得分:1)

您可以尝试一些事情。 AddJwtBearer函数中的第一个也接受方案名称。您可以尝试添加两个具有不同方案名称的JwtBearers。不完全确定它是否会允许多个jwts

另一种方法是make尝试配置自己的JwtEventBearer并将其设置为cfg.Events。

如果所有其他方法都失败了,您可以随时手动创建并验证jwt。 您首先需要制作两个令牌验证参数对象。您可以像这样创建令牌:

        var handler = new JwtSecurityTokenHandler();

        var jwt = handler.CreateJwtSecurityToken(new SecurityTokenDescriptor
        {
            Audience = myAudience, 
            Expires = DateTime.UtcNow.Add(Expiary),
            Subject = myPrincipal,
            SigningCredentials = Signing
        });

        return handler.WriteToken(jwt);

要进行验证,您可以先查看受众群体:

        var _token = handle.ReadJwtToken(token);
        if (_token.Audiences == ...)

一旦您了解了受众群体以及要使用的令牌验证参数,您就可以通过以下方式进行验证:

        SecurityToken sToken = handle.CreateJwtSecurityToken();
        var myPrincipal = handle.ValidateToken(token, TokenValidationParameters, out sToken);