Authentication token Auth

支持跨域访问,无状态认证

Feature

支持跨域访问:
    Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输

无状态(也称:服务端可扩展行):
    Token机制在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息,
    只需要在客户端的cookie或本地介质存储状态信息

更适用CDN: 
    可以通过内容分发网络请求你服务端的所有资料(如:javascript,HTML,图片等),而你的服务端只要提供API即可

去耦: 
    不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在你的API被调用的时候,你可以进行Token生成调用即可

更适用于移动应用: 
    当你的客户端是一个原生平台(iOS, Android)时,Cookie是不被支持的(你需要通过Cookie容器进行处理),
    这时采用Token认证机制就会简单得多。

CSRF:
    因为不再依赖于Cookie,所以你就不需要考虑对CSRF(跨站请求伪造)的防范。

Fundamental

RequestRefers to the whole process of a valid request, i.e., an http request to the server from the process ends, the process returns the response, stored in the HttpServletRequestobject.

SessionA user global variables, are valid for the entire session. As long as you do not close the page has been effective (or until the user has not led to active session expires, the default session expiration time is 30 minutes)

token authentication process

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

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

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

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

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

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

因为token是被签名的,所以我们可以认为一个可以解码认证通过的token是由我们系统发放的,其中带的信息是合法有效的

Token-based authentication of JWT

JSON Web Token(JWT)It is a very lightweight specification. This specification allows us to use JWT deliver secure and reliable information between the user and the server.

JWT composed of:
a JWT is actually a string that consists of three parts, 头部, 载荷and签名

头部(Header)
    用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。

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

在头部指明了签名算法是HS256算法。


载荷(Payload)

{ "iss": "Online JWT Builder", 
  "iat": 1416797419, 
  "exp": 1448333419, 
  "aud": "www.example.com", 
  "sub": "[email protected]", 
  "GivenName": "Johnny", 
  "Surname": "Rocket", 
  "Email": "[email protected]", 
  "Role": [ "Manager", "Project Administrator" ] 
}

iss:
    该JWT的签发者,是否使用是可选的;

sub:
    该JWT所面向的用户,是否使用是可选的;

aud:
    接收该JWT的一方,是否使用是可选的;

exp(expires):
    什么时候过期,这里是一个Unix时间戳,是否使用是可选的;

iat(issued at):
    在什么时候签发的(UNIX时间),是否使用是可选的;

nbf (Not Before):
    如果当前时间在nbf里的时间之前,则Token不被接受;是否使用是可选的;

jti:
    JWT的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。


签名(Signature)
    将上面的两个编码后的字符串都用"."连接在一起(头部在前),
    拼接完的字符串用HS256算法进行加密(在加密的时候,我们还需要提供一个密钥(secret),加盐secret组合加密),
    就得到了签名。


最后,将这一部分签名也拼接在被签名的字符串后面,我们就得到了完整的JWT

Guess you like

Origin www.cnblogs.com/loveer/p/11429034.html