地狱,我正在考虑通过保持无状态目的并避免XSS和CSRF而不使用完整的基于Cookie的身份验证来使用JWT作为身份验证的正确方法
这是我的想法:
根据4个服务-> 客户服务(ui) 网关服务(Zuul) 认证服务 登录服务(提供JWT令牌的服务) 商业服务(对此服务的访问需要经过验证)
请求顺序示例:
1-从客户服务开始,登录页面上的用户提供其用户名/密码进行请求
2-网关服务接收到该请求并将其转发给登录服务(用户无需登录,因为/ login允许所有人登录)
3-登录服务从网关接收请求,如果凭据正确,则返回JWT令牌,否则抛出未经授权的异常
4-如果成功,则客户服务会获取令牌
5-客户端通过网关呼叫业务服务,并在标头中提供其JWT令牌
6-除此标头客户端外,还将生成一个私钥,该私钥将用于通过cookie生成加密的JWT令牌: -(cookie中的私钥)<-不能通过设置一组规则被盗 -(在cookie中加密的JWT令牌)<-不能通过设置一组规则被盗 -(JWT中的x-auth-token)<-可能被盗
7-验证服务检查: 1-通过标题的JWT令牌有效(否则抛出非自动异常) 2-如果存在私钥cookie(否则抛出非自动异常) 3-如果存在JWT加密的cookie(否则抛出非自动异常) 4-用cookie 1(私钥)加密JWT令牌,然后比较加密令牌是否等于cookie 2(encrypted JWT令牌)->(否则抛出非自动抛出的异常)
8-如果用户已通过身份验证,则返回来自业务服务的响应
似乎相关?