您的位置:首页 > 其它

token,session,cookie

2017-04-23 17:10 447 查看
通俗的来说就是暗号(一串字符串或者别的),这个暗号可以用来做很多事,最常做的是身份验证。

基于session的网站身份验证流程:(传统验证流程)

  因为http协议是无状态的,用户在利用账号密码登陆验证后,后面的请求,服务器无法验证用户的身份,所以,在登陆后,服务器会给客户端发session(会过期),存在cookie里,客户端登陆后的请求都带有这个session,服务器校验session,如果通过,就返回相应信息。

基于token的身份验证流程:

  token也一样。

客户端使用用户名跟密码请求登录

服务端收到请求,去验证用户名与密码

验证成功后,服务端会签发一个Token,再把这个Token发送给客户端

客户端收到Token以后可以把它存储起来,比如放在Cookie里或者LocalStorage里

客户端每次向服务端请求资源的时候需要带着服务端签发的Token

服务端收到请求,然后去验证客户端请求里面带着的Token,如果验证成功,就向客户端返回请求的数据

一个通用的标准webtoken:JSONWebTokens

长这样:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJuaW5naGFvLm5ldCIsImV4cCI6IjE0Mzg5NTU0NDUiLCJuYW1lIjoid2FuZ2hhbyIsImFkbWluIjp0cnVlfQ.SwyHTEx_RQppr97g4J5lKXtabJecpejuef8AqKYMAJc

构成:

  header.PayLoad.Signature

header:

  一个是Token的类型,另一个是使用的token加密算法

  {
  "typ":"JWT",
  "alg":"HS256"
  }

Payload:


iss:Issuer,发行者

sub:Subject,主题

aud:Audience,观众

exp:Expirationtime,过期时间

nbf:Notbefore

iat:Issuedat,发行时间

jti:JWTID

Header和Payload都要编码成一个字符串

Signature:
  JWT的最后一部分是Signature,这部分内容有三个部分,先是用Base64编码的header.payload,再用加密算法加密一下,加密的时候要放进去一个Secret,这个相当于是一个密码,这个密码秘密地存储在服务端。

  varencodedString=base64UrlEncode(header)+"."+base64UrlEncode(payload);
  signature=HMACSHA256(encodedString,'secret)


Cookie:
  http无状态下,浏览器客户端为了维持客户端和服务器会话状态的字段(字符串),Cookie的内容也是明文保存的,有些浏览器提供界面修改,所以,不适合保存重要的或者涉及隐私的内容。

  是客户端生成的,理论上用来存储一些额外页面信息。

会存在客户端请求包的header里

session: 

http无状态下,服务器为了维持客户端和服务器会话状态的字段(字符串),一般用cookie来传递
因为会占用服务器的内存,所以最好用来存一下重要的信息,如登陆信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: