【问题标题】:Is checking JWT expiration enough to authorize a user?检查 JWT 过期是否足以授权用户?
【发布时间】:2018-03-06 22:30:36
【问题描述】:
我正在学习 Angular,并通过检查令牌是否过期看到了很多用户授权示例。例如,如果用户有一个令牌并且它没有过期,让他访问受保护的根。我不明白,这是作为一个简化的例子显示还是真的是通常的做法。从技术上讲,如果我的令牌没有过期但签名无效,我仍然会通过初始授权阶段并“更接近”受保护的资源。我误解了什么吗?
然后,如果我在后端也使用 Django REST JWT,它允许在服务器端使用 verify token。这意味着应该在每个操作上将请求发送到服务器。这不是一种适当的授权方式还是有其他目的?
一般来说,授权用户或用户行为的正确方法是什么?
【问题讨论】:
标签:
angular
django-rest-framework
jwt
django-rest-framework-jwt
【解决方案1】:
您的客户端应用程序(Angular App)确实无法验证 JWT,也不应该能够解码 JWT 并检查过期时间。
你的 Angular 应用应该:
- 向 API 发送登录请求
- 如果请求成功,则接收带有 JWT 令牌的响应
- 将 JWT 与对 API 的每个请求一起发送。通常这是通过设置
Authorization: Bearer xxxxxxxxxxxxxxx 标头来完成的。
- 服务器/API 必须是对用户进行身份验证的服务器/API,当它收到请求时,它应该检查令牌的有效性。
- 然后,Angular App 应该检查响应是否有异常,特别是我认为值得一提的是正确处理 401 响应。
类似于 403 Forbidden,但专门用于需要身份验证但已失败或尚未提供身份验证时使用
401 响应可能会返回响应消息,指示身份验证失败的方式和原因,即