言成言成啊 | Kit Chen's Blog

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模式

  1. 方便快捷、不需要开发者额外编程。这是因为浏览器判定符合同源策略时,自动携带Cookie,完全不需要开发者关心,只需要服务端做好验证即可。
  2. 适合同源(非跨域)下B/S开发。这是因为大多数JavaScript开发框架,考虑到安全问题,限制了让开发者直接获取Set-Cookie响应头,How can i get set-cookie header ? · Issue #295 · axios/axios。如果是C/S、S/S开发,就无所谓了。

Token模式

  1. 适合开发者自由开发,更灵活。至于如何携带认证信息,由开发者自己决定。
  2. 不局限于任何环境。无论是同源还是非同源,都支持。
发布:2023-10-29 09:35:03
修改:2023-11-14 11:35:38
链接:https://meethigher.top/blog/2023/two-authorization-mode/
标签:java http 
付款码 打赏 分享
Shift+Ctrl+1 可控制工具栏