【token验证失败 _会话管理 】 | IT修真院·坑乎
token验证失败
我也踩过这个坑( 1 )
已统计您的踩坑,无需重复点击
回答(1)
会话管理
详细描述
源码
编辑于2024-11-23
  • [武汉|结业弟子]JAVA-李伟明
    0

    基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。

    流程上是这样的:

    1. 1、用户使用用户名密码来请求服务器
    2. 2、服务器进行验证用户的信息
    3. 3、服务器通过验证发送给用户一个token
    4. 4、客户端存储token,并在每次请求时附送上这个token值
    5. 5、服务端验证token值,并返回数据


    JWT是由三段信息构成的:第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature).

    头信息指定了该JWT使用的签名算法:

    header = '{"alg":"HS256","typ":"JWT"}'
    • 消息体包含了JWT的意图:
    payload = '{"loggedInAs":"admin","iat":1422779638}'//iat表示令牌生成的时间

    未签名的令牌由base64url编码的头信息和消息体拼接而成(使用”.”分隔),签名则通过私有的key计算而成:

    key = 'secretkey'  
    unsignedToken = encodeBase64(header) + '.' + encodeBase64(payload)  
    signature = HMAC-SHA256(key, unsignedToken)

    最后在未签名的令牌尾部拼接上base64url编码的签名(同样使用”.”分隔)就是JWT了:

    token = encodeBase64(header) + '.' + encodeBase64(payload) + '.' + encodeBase64(signature) 
    
    # token看起来像这样: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0


    编辑于2018-07-06