HTTP双选一授权模式
发布于2023-10-29 09:35:03,更新于2023-11-14 11:35:38,标签:java http 文章会持续修订,转载请注明来源地址:https://meethigher.top/blog双选一授权模式,何谓双选一?
- 满足同源策略下的Cookie模式
- 不满足同源策略下的Token模式
Chromium内核浏览器中,如果接口携带了Set-Cookie请求头,则响应内容会提示:No Resources with given identifier found
该篇文章有对应的示例demo,为何叫做Cookie模式和Token模式呢,此处简单记录。不过在此之前,先补充基础知识
Cookie模式
一提到客户端的Cookie,就想到了服务端的Session,其实不然。
用Session来验证Cookie只是传统的做法,服务端至于如何验证,做法很灵活。甚至可以将Cookie当做Token一样验证,只是Cookie是为了方便在同源下使用。
此处给出简单的示例。
1.) 服务端配置Cookie拦截器。若验证失败则丢出提示,否则就正常返回数据。
2.) 服务端添加登录入口。若登录成功,服务端返回code为0,并携带set-cookie响应头。否则返回code为1。
1 | httpServletResponse.setHeader(HttpHeaders.SET_COOKIE, "token=" + token + ";Max-Age=604800;path=/;"); |
3.) 客户端完成登录逻辑。若返回code为0,可直接跳转首页,若code为1,则提示错误。全程不需要关注cookie的存取。
Token模式
此处给出简单示例
1.) 服务端配置Token拦截器。若验证失败则丢出提示,否则就正常返回数据。
2.) 服务端添加登录入口。若登录成功,服务端返回code为0,并返回token。否则返回code为1。
3.) 客户端完成登录逻辑。若返回code为0,则存储token。若code为1,则提示错误。至于token如何存储,开发者自行决定。
4.) 客户端配置全局拦截器,携带token。只需要token如何携带,开发者自行决定。
两种模式对比
Cookie模式和Token模式,都是相对于客户端来说,由客户端存储。
其中的区别如下
Cookie模式
- 方便快捷、不需要开发者额外编程。这是因为浏览器判定符合同源策略时,自动携带Cookie,完全不需要开发者关心,只需要服务端做好验证即可。
- 适合同源(非跨域)下B/S开发。这是因为大多数JavaScript开发框架,考虑到安全问题,限制了让开发者直接获取Set-Cookie响应头,How can i get set-cookie header ? · Issue #295 · axios/axios。如果是C/S、S/S开发,就无所谓了。
Token模式
- 适合开发者自由开发,更灵活。至于如何携带认证信息,由开发者自己决定。
- 不局限于任何环境。无论是同源还是非同源,都支持。
打赏