我正在构建一个.net核心web api.
前言 - 我已根据https://stormpath.com/blog/token-authentication-asp-net-core和https://dev.to/samueleresca/developing-token-authentication-using-aspnet-实施了令牌身份验证核心.我还在github上阅读了一些问题,在这里也是如此.
这也派上用场了https://goblincoding.com/2016/07/24/asp-net-core-policy-based-authorisation-using-json-web-tokens/.
实施之后,我感觉我错过了一些东西.
我创建了一个位于Web客户端的简单Angular应用程序.当我进行身份验证时,会向客户端发送令牌.我现在将它存储在会话中(仍然在开发中,因此将解决以后存储它的安全问题).
不确定这个(JWT(JSON Web Token)自动延长到期时间)是有用的,因为我没有实现刷新令牌,据我所见.
我注意到,当我调用logout,然后再次重新登录时,会向客户端发送一个新令牌 - 正如预期的那样.但是,如果令牌到期时间已过(我将其设置为1分钟进行测试)然后刷新页面,则令牌似乎在我的应用程序中保持不变.即好像令牌永不过期?!
我本来希望客户端返回401 Unauthorized错误,然后我可以处理强制用户重新进行身份验证.
这不是这应该如何工作?是否有一些自动刷新令牌魔法在默认的背景中进行(我没有在教程中明确设置任何刷新令牌的概念)?或者我错过了一些关于令牌身份验证的概念?
此外 - 如果这是一个永久刷新的令牌,如果令牌被泄露,我是否应该关注安全性?
谢谢你的帮助
目前我正在使用 JWT-Bearer-Authentication 对 ASP.NET-Core WebApi 进行编程。
为了使 API 可从不同的时区访问,我使用以下模式将JWT 中的字段nbf(notBefore) 和exp(expires) 设置为 UTC 时间戳:
var utcNow = DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Unspecified);
...
var tokenOptions = new JwtSecurityToken(
notBefore: utcNow,
expires: utcNow.AddSeconds(3600),
);
...
Run Code Online (Sandbox Code Playgroud)
对于令牌生成,一切都很好,nbf并且exp包含代表当前 UTC 时间的 UNIX 时间戳。
但是在进行令牌验证时,一切都在 5 分钟(我的时钟偏差设置)内有效,然后我只能从 API 获得 401,因为令牌验证是使用我在德国的当前时区完成的。
有没有办法在 .NET-Core 中设置 JwtAuthentication-Middleware 以使用 UTC-Time 进行令牌验证?或者有没有其他方法可以解决这个问题?