• JWT


    1、jwt认证和session认证

        JWT,全称是 Json Web Token , 是一种 JSON 风格的轻量级的授权和身份认证规范,可实现无状态、分布式的 Web 应用授权:

          JWT属于无状态认证,支持集群化部署,服务端可以任意迁移,减少服务端存储session压力,多平台跨域。流程:用户发送用户名和密码,服务端验证成功后用户信息加密并且编码成一个 token给客户端,客户端每次请求携带token,服务端接收请求时会解密token再验证token是否有效,获取用户登录信息,再根据授权获取受保护的资源。验证token不通过的情况有很多,比如签名不正确,无权限等

    2、JWT组成结构

      jWT由三段字符串和两个点号组成,如(xxxxxx.yyyyy.zzzzz)

      JWT头是一个json对象,格式如json{"alg":"HS256","typ":"JWT"}   alg是只jwt签名算法

           JWT主体是一个json对象,格式如json{"exp":"201909181230","role":"admin","isShow":false},有效载荷,包括三部分

          1)标准注册声明,一般包括:

              iss:jwt的签发者/发行人;

              sub:主题;

              aud:接收方;

              exp:jwt过期时间;

              nbf:jwt生效时间;

              iat:签发时间

              jti:jwt唯一身份标识,可以避免重放攻击

           2)公共声明,该部分可以在客户端解密

           2)私有声明

           jwt哈希签名:HMACSHA256(base64UrlEncode(JWT 头) + "." + base64UrlEncode(有效载荷),密码)

      JWT最终结果如下:base64UrlEncode(JWT 头)+"."+base64UrlEncode(有效载荷)+"."+HMACSHA256(base64UrlEncode(JWT 头) + "." + base64UrlEncode(有效载荷),密码)

    3、有以下几个方法可以做到失效 JWT token(后期再考虑不同方式的优缺点)

    1. 将 token 存入 DB(如 Redis)中,失效则删除;但增加了一个每次校验时候都要先从 DB 中查询 token 是否存在的步骤,而且违背了 JWT 的无状态原则(这不就和 session 一样了么?)。
    2. 维护一个 token 黑名单,失效则加入黑名单中。
    3. 在 JWT 中增加一个版本号字段,失效则改变该版本号。
    4. 在服务端设置加密的 key 时,为每个用户生成唯一的 key,失效则改变该 key。

    4、JWT 注意事项

    • JWT 默认不加密,如果要写入敏感信息必须加密,可以用生成的原始令牌再次对内容进行加密;
    • JWT 无法使服务器保存会话状态,当令牌生成后在有效期内无法取消也不能更改;
    • JWT 包含认证信息,如果泄露了,任何人都可以获得令牌所有的权限;因此 JWT 有效期不能太长,对于重要操作每次请求都必须进行身份验证。
  • 相关阅读:
    WCF Security基本概念(转载)
    Step by Step 配置使用HTTPS的ASP.NET Web应用
    HTTPS那些事(三)攻击实例与防御(转载)
    HTTPS那些事(二)SSL证书(转载)
    HTTPS那些事(一)HTTPS原理(转载)
    WCF服务创建与抛出强类型SOAP Fault
    WCF服务的异常消息
    如何创建一个RESTful WCF Service
    (转)webHttpBinding、basicHttpBinding和wsHttpBinding区别
    如何创建一个AJAX-Enabled WCF Service
  • 原文地址:https://www.cnblogs.com/yaohuiqin/p/12712464.html
Copyright © 2020-2023  润新知