我只是想知道,是否可以为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();
}
答案 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);