【问题标题】:asp.net core identity - 2 types of jwt tokensasp.net 核心身份 - 2 种类型的 jwt 令牌
【发布时间】: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();
    }

【问题讨论】:

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


    【解决方案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);
    

    【讨论】:

    • 感谢回复,我试试看。
    猜你喜欢
    • 2017-09-13
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2017-05-13
    • 2021-12-17
    • 2019-07-25
    • 1970-01-01
    相关资源
    最近更新 更多