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 身份验证