- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 ASP 上创建自己的自定义身份验证。 Net MobileService 部署在 Azure 上。我使用 JWT token 。以下是我生成新 token 的方法(claimType = email):
public static string GetSecurityToken(String email)
{
var symmetricKey = Convert.FromBase64String(signingKey);
var tokenHandler = new JwtSecurityTokenHandler();
var now = DateTime.UtcNow;
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(new[]
{
new Claim(ClaimTypes.Email, email)
}),
NotBefore = now,
Expires = now.AddYears(10),
Issuer = issuer,
Audience = audience,
IssuedAt = now,
SigningCredentials = new SigningCredentials(
new SymmetricSecurityKey(symmetricKey),
SecurityAlgorithms.HmacSha256Signature),
};
var stoken = tokenHandler.CreateToken(tokenDescriptor);
var token = tokenHandler.WriteToken(stoken);
return token;
}
token 被发送到客户端并存储。但是,当我尝试根据 token 授权消息时,出现错误:
Lifetime validation failed. The token is missing an Expiration Time.
这就是我尝试验证 token 的方式:
public static ClaimsPrincipal GetPrincipal(string token)
{
try
{
var tokenHandler = new JwtSecurityTokenHandler();
var jwtToken = tokenHandler.ReadToken(token) as JwtSecurityToken;
if (jwtToken == null)
return null;
var symmetricKey = Convert.FromBase64String(signingKey);
Debug.WriteLine(String.Format("JWTManager > GetPrincipal > Validating Token: {0}", token));
foreach (Claim claim in jwtToken.Claims)
{
Debug.WriteLine(String.Format("JWTManager > GetPrincipal > Claims: {0}", claim.ToString()));
}
var validationParameters = new TokenValidationParameters()
{
//RequireExpirationTime = true,
//ValidateLifetime = true,
ValidateIssuer = true,
ValidateAudience = true,
IssuerSigningKey = new SymmetricSecurityKey(symmetricKey),
};
SecurityToken securityToken;
var principal = tokenHandler.ValidateToken(token, validationParameters, out securityToken);
if (principal != null)
Debug.WriteLine(String.Format("JWTManager > GetPrincipal > Principal: {0}", principal));
return principal;
}
catch (SecurityTokenException ex)
{
Debug.WriteLine(String.Format("JWTManager > GetPrincipal: {0}", ex.Message));
return null;
}
catch (Exception ex)
{
Debug.WriteLine(String.Format("JWTManager > GetPrincipal: {0}", ex.Message));
return null;
}
}
执行tokenHandler.ValidateToken
时抛出异常,并向principal
返回null。
我的假设是,也许我没有正确设置 Expires
和 Issuers
属性,并且 TokenHanlder 无法验证它们。但是,当我检查 jwtToken 时,所有声明均已正确设置。
这是完整的调试输出:
JWTManager > GetPrincipal > Claims: email: testEmail@email.com
JWTManager > GetPrincipal > Claims: nbf: 1494752301
JWTManager > GetPrincipal > Claims: exp: 33051661101
JWTManager > GetPrincipal > Claims: iat: 1494752301
JWTManager > GetPrincipal > Claims: iss: MASKED
JWTManager > GetPrincipal > Claims: aud: MAKSED
JWTManager > GetPrincipal: IDX10225: Lifetime validation failed. The token is missing an Expiration Time. Application: Tokentype:
最佳答案
@aha,看来您通过将到期日期时间缩短到 future 一年来解决了您的问题。这是有效的,但是如果您想了解它之前失败的底层架构原因(并因此在您自己的代码中进行适当的架构更改),您可以在此处阅读这篇文章:https://stackoverflow.com/a/46654832/1222775 .
最重要的是,针对 Microsoft owin 中间件验证的 JWT 的过期日期的上限为 2147483647
(也恰好是 Int32.MaxValue),这意味着:2038 年 1 月 19 日星期二 03:14:07 GMT
在您的 SO 问题中,您发布的调试输出显示您使用的“exp”声明值,其值为 33051661101
,可转换为:3017 年 5 月 14 日星期三 8: 58:21 AM
这超出了 Microsoft 的 exp 值上限近 80 年:)。
我希望微软能够尽快解决这个问题,但同时对于任何遇到类似问题的人来说,尽量不要发行太持久的代币,或者至少不要让它超过 2038 年 1 月 19 日星期二@格林威治标准时间 03:14:07 :)。
关于asp.net - ASP.Net 中的 JWT token 异常(生命周期验证失败。 token 缺少过期时间。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43962567/
我正在开发一个使用多个 turtle 的滚动游戏。玩家 turtle 根据按键命令在 Y 轴上移动。当危害和好处在 X 轴上移动时,然后循环并改变 Y 轴位置。我尝试定义一个名为 colliding(
我不明白为什么他们不接受这个作为解决方案,他们说这是一个错误的答案:- #include int main(void) { int val=0; printf("Input:- \n
我正在使用基于表单的身份验证。 我有一个注销链接,如下所示: 以及对应的注销方法: public String logout() { FacesContext.getCurren
在 IIS7 应用程序池中有一个设置 Idle-time out 默认是 20 分钟,其中说: Amount of time(in minutes) a worker process will rem
我是一名优秀的程序员,十分优秀!