Tim*_*der 6 c# jwt asp.net-core
我需要不朽的 JWT 令牌。当然,我可以为 Expires 设置一些大的值,但我更喜欢在我的令牌中根本没有 exp 声明。标准.net core CreateEncodedJwt允许在expires、notBefore、issuedAt中传递null。我为所有这些传递 null,并且我的令牌包含 exp 令牌(+1 小时)。到底是怎么回事?!
var securityKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("FF804E8A-2A0E-4F94-A6F5-8325822F8DF5"));
var claims = new List<Claim>
{
new Claim("type1", "value1"),
new Claim("type2", "value2")
};
var token = new JwtSecurityTokenHandler().CreateEncodedJwt(
issuer: null,
audience: null,
subject: new ClaimsIdentity(claims),
notBefore: null,
issuedAt: null,
expires: null,
signingCredentials: new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256));
Run Code Online (Sandbox Code Playgroud)
这是解析工具: https: //jwt.io
这是我的令牌:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXBlMSI6InZhbHVlMSIsInR5cGUyIjoidmFsdWUyIiwibmJmIjoxNTY1NDI5MzY2LCJleHAiOjE1NjU0MzI5NjYsImlhdCI6MTU2NTQyOTM2Nn0.U vJiOQNO_yMzdenf5jAotPHj7zrcEUApraezzcVSicA
里面是这样的:
{“类型1”:“值1”,“类型2”:“值2”,“nbf”:1565429366,“exp”:1565432966,“iat”:1565429366}
请帮助摆脱 nbf、exp、iat。提前致谢!
创建令牌的代码的简化版本JwtSecurityTokenHandle包含下一部分:
if (SetDefaultTimesOnTokenCreation &&
(!expires.HasValue || !issuedAt.HasValue || !notBefore.HasValue))
{
DateTime now = DateTime.UtcNow;
if (!expires.HasValue)
expires = now + TimeSpan.FromMinutes(TokenLifetimeInMinutes);
if (!issuedAt.HasValue)
issuedAt = now;
if (!notBefore.HasValue)
notBefore = now;
}
Run Code Online (Sandbox Code Playgroud)
所以你基本上必须设置SetDefaultTimesOnTokenCreation为 false。JWT的标准没有反对空exp声明:
“exp”(过期时间)声明标识了过期时间,在此时间或之后 JWT 不得接受处理。
它的值必须是包含 NumericDate 值的数字。此声明的使用是可选的。
因此,JWT 格式验证器的所有正确实现都应该成功验证令牌,而无需内部声明。
| 归档时间: |
|
| 查看次数: |
2889 次 |
| 最近记录: |