【发布时间】:2017-10-13 23:32:10
【问题描述】:
我正在为具有单个 REST API 后端的 SPA Web 应用程序寻找一种简单的身份验证方案。
要求是:
- 针对自定义凭据存储的身份验证(应该足够灵活);
- 在指定的空闲超时后自动注销用户;
- 尊重最佳安全实践。
目前的想法:
- 使用 HTTPS;
- 创建身份验证 API 端点;
- SPA 会将用户凭据传递给身份验证 API 端点;
- 如果验证成功,上述 API 端点会以令牌响应(JWT,包括:用户 ID、可选用户 ID 版本;已将过期时间设置为现在 + 允许的空闲超时);
- SPA 将令牌存储在浏览器本地存储中;
- 此后 SPA 在所有 API 请求的标头中都包含令牌;
- 所有受保护的 API 端点验证提供的令牌并从中提取用户 ID;
- SPA 跟踪令牌的过期时间,当它接近时,SPA 向身份验证 API 端点发送续订请求(不包括凭据,仅包括当前令牌);
- 身份验证 API 端点处理续订请求并使用新令牌或 401 状态代码进行响应。
我预计这种方法有以下好处:
- 简单 - 需要 2 个后端组件(身份验证 API 端点和令牌验证/解析实用程序)+ 3 个 SPA 组件(登录、刷新、将令牌插入请求标头);
- 灵活性 - 令牌仅包含标识声明,它不以任何方式限制访问控制实现,也不限制底层身份验证方案;
- 不需要会话 - 无需查询会话存储,这可能对性能有好处;
- 使单个用户令牌无效的能力 - 可以通过增加(或更改)用户存储中的用户 ID 版本来实现。
所以问题是:
我错过了什么? 这个方案有什么缺点吗?
【问题讨论】:
标签: rest api http authentication jwt