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 令牌的主要内容,如果未能解决你的问题,请参考以下文章

text 使用ASP.NET Core 2 Web API,Angular 5,.NET核心身份和Facebook登录进行JWT身份验证

在 ASP.NET 核心中创建 JWT 是不是有更简单的方法?又名“JWT 身份验证的最佳实践?”

通过 ASP.NET 核心身份中的角色声明进行 JWT 身份验证

asp.net 核心中的 JWT 身份验证验证

如何在使用 JWT 的 asp.net 核心 web 应用和 web api 中使用谷歌身份验证

JWT 和 asp.net(核心)Web 应用程序