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

Posted

技术标签:

【中文标题】asp.net 核心身份 - 2 种类型的 jwt 令牌【英文标题】:asp.net core identity - 2 types of jwt tokens 【发布时间】:2018-03-03 22:06:45 【问题描述】:

我只是想知道,是否可以为 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】:

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

另一种方法是尝试配置自己的 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);

【讨论】:

感谢回复,我试试看。

以上是关于asp.net 核心身份 - 2 种类型的 jwt 令牌的主要内容,如果未能解决你的问题,请参考以下文章