Cookie鉴权

请求

  1. POST /login HTTP/1.1
  2. Host: jirengu.com
  3. Content-Type: application/json;charset=UTF-8
  4. {username: "hunger", password: "123456"}

响应

  1. HTTP/1.1 200 OK
  2. Content-Type: application/json; charset=utf-8
  3. set-cookie: sid=abc24sf; Path=/; Expires=Wed, 03 Feb 2021 12:14:36 GMT; HttpOnly; Secure; SameSite=Strict
  4. {"status": "ok"}

含义:

  • set-cookie告诉浏览器我要种cookie
  • 在Wed, 21 Oct 2021 06:18:00 GMT 时这个cookie失效
  • 标记为 Secure 的 Cookie 只应通过被 HTTPS 协议加密过的请求发送给服务端
  • 使用 HttpOnly 属性告诉浏览器禁止通过 JavaScript 访问 cookie 值
  • SameSite=Strict告诉浏览器跨域请求时不要带上cookie,设置为none时表示跨域也能带上

请求报文

  1. GET /search HTTP/1.1
  2. Host: jirengu.com
  3. Cookie: sid=abc24sf;
  4. {"q":"饥人谷"}

带着cookie去请求,服务器可以识别身份。

Token 鉴权

请求

  1. POST /login HTTP/1.1
  2. Host: jirengu.com
  3. Content-Type: application/json;charset=UTF-8
  4. {username: "hunger", password: "123456"}

响应

  1. HTTP/1.1 200 OK
  2. Content-Type: application/json; charset=utf-8
  3. {"status": "ok", "token": "abcd1234"}

请求

  1. GET /search HTTP/1.1
  2. Host: jirengu.com
  3. Cookie: sid=abc24sf
  4. Authorization: Bearer abcd1234
  5. {"q":"饥人谷"}

Authorization 带着token去请求,服务器可以识别身份。

withCredentials

XMLHttpRequest.withCredentials 属性是一个[Boolean](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Boolean)类型,它指示了是否该使用类似cookies,authorization headers(头部授权)或者TLS客户端证书这一类资格证书来创建一个跨站点访问控制(cross-site Access-Control)请求。在同一个站点下使用withCredentials属性是无效的。
`

<br />如果在发送来自其他域的XMLHttpRequest请求之前,未设置withCredentials为true,那么就不能为它自己的域设置cookie值。而通过设置withCredentials` 为true获得的第三方cookies,将会依旧享受同源策略,因此不能被通过document.cookie或者从头部相应请求的脚本等访问。