我要进行身份验证。他们想要使用ngx-auth-首先,他们想要实现,正如文档中所说的2个令牌:访问和刷新。但是现在他们只想用1个令牌来做。我的问题是:
1)是否可以使用没有刷新令牌的软件包?我认为该软件包主要基于该刷新令牌。
2)如何检查令牌的到期?是否通过exp
参数像在基本jwt中一样?我应该多久检查一次令牌有效性-在每个请求上还是应该例如每15分钟?
答案 0 :(得分:2)
您可以使用此库。要忽略RefreshToken,只需重写适当的方法即可。
要检查有效性,请解码令牌(base64),并检查exp
属性以了解是否过期。您应该在通过HTTP_INTERCEPTOR
的每个请求之前执行此操作。如果令牌已过期,则请求新令牌并重播原始查询。
更大的问题是如果不想使用过期令牌,如何重新生成过期令牌?您不能在客户端存储用户名和密码。后端需要提供一些端点,以通过传递过期的令牌来允许重新生成令牌。
令牌应该长时间无效。如果您的客户不希望刷新令牌,也许呢?想要使令牌对例如有效。然后24小时考虑将客户端IP地址放入令牌中,并在每次传入请求时对其进行验证。这不是常见的方法,但是对于不遵循标准(例如附加安全机制)的“硬”客户来说是好的。
@编辑
我检查了 ngx-auth 源代码,刷新令牌的方法有点不同。如果此库在后端返回401 Unauthorized
到客户端时刷新令牌,请编写。在这种情况下,您不必验证exp
属性。只是拦截所有传入的响应,如果状态为401,则意味着我们必须刷新令牌。
此库中的令牌服务只是没有逻辑的抽象接口。 您必须扩展AuthService类,并为特定方法提供自己的实现。
请检查 ngx-auth-example 存储库https://github.com/serhiisol/ngx-auth-example/blob/master/src/app/shared/authentication/authentication.service.ts
在这里,您可以对该库进行简单的实现。
您不想使用刷新令牌。在这种情况下,请覆盖refreshToken
方法并找到其他方法来处理重新授权。