装饰工程 技术支持 东莞网站建设,购物类型网站建设,网站建设工作总结报告,东莞百度推广排名文章目录一、用户身份认证1.1 单一服务器模式1.2 SSO#xff08;Single Sign On#xff09;模式1.3 Token模式二、JWT令牌2.1 JWT 令牌说明2.2 JWT令牌的组成2.3 JWT 问题和趋势2.4 JWT 测试一、用户身份认证
1.1 单一服务器模式 一般过程如下#xff1a;
用户向服务器发送…
文章目录一、用户身份认证1.1 单一服务器模式1.2 SSOSingle Sign On模式1.3 Token模式二、JWT令牌2.1 JWT 令牌说明2.2 JWT令牌的组成2.3 JWT 问题和趋势2.4 JWT 测试一、用户身份认证
1.1 单一服务器模式 一般过程如下
用户向服务器发送用户名和密码。验证服务器后相关数据如用户名用户角色等将保存在当前会话session中。服务器向用户返回 session_idsession 信息都会写入到用户的 Cookie。用户的每个后续请求都将通过在 Cookie 中取出 session_id 传给服务器。服务器收到 session_id 并对比之前保存的数据确认用户的身份。
缺点
单点性能压力无法扩展。分布式架构中需要 session 共享方案session 共享方案存在性能瓶颈。 session 广播性能瓶颈不推荐redis 代替 session推荐性能高
1.2 SSOSingle Sign On模式
方式CAS单点登录、OAuth2 分布式SSO(single sign on)模式单点登录英文全称 Single Sign On简称就是 SSO。它的解释是在多个应用系统中只需要登录一次就可以访问其他相互信任的应用系统。
如图所示图中有3个系统分别是业务 A、业务 B、和 SSO。业务 A、业务 B 没有登录模块。而 SSO 只有登录模块没有其他的业务模块。
一般过程如下
当业务 A、业务 B 需要登录时将跳到 SSO 系统。SSO 从用户信息数据库中获取用户信息并校验用户信息SSO 系统完成登录。然后将用户信息存入缓存例如redis。用户访问业务A或业务B需要判断用户是否登录时将跳转到SSO系统中进行用户身份验证SSO判断缓存中是否存在用户身份信息。这样只要其中一个系统完成登录其他的应用系统也就随之登录了。这就是单点登录SSO的定义。
优点用户身份信息独立管理更好的分布式管理。可以自己扩展安全策略
缺点认证服务器访问压力较大。
1.3 Token模式 优点
无状态 token是无状态session是有状态的基于标准化你的API可以采用标准化的 JSON Web Token (JWT)
缺点
占用带宽无法在服务器端销毁
二、JWT令牌
访问令牌的类型
2.1 JWT 令牌说明
JWT 是 JSON Web Token 的缩写即 JSON Web 令牌是一种自包含令牌。
JWT 的使用场景
一种情况是 webapi类似之前的阿里云播放凭证的功能另一种情况是多 web 服务器下实现无状态分布式身份验证
JWT 的认证过程 JWT的作用
JWT 最重要的作用就是对 token 信息的防伪作用
JWT 的原理
一个 JWT 由三个部分组成JWT 头、有效载荷、签名哈希最后由这三者组合进行 base64 编码得到 JWT
JWT的用法
客户端接收服务器返回的 JWT将其存储在 Cookie 或 localStorage 中
此后客户端将在与服务器交互中都会带 JWT。如果将它存储在 Cookie 中就可以自动发送但是不会跨域因此一般是将它放入 HTTP 请求的 Header Authorization 字段中。
当跨域时也可以将 JWT 放置于 POST 请求的数据主体中。
2.2 JWT令牌的组成
一个典型的 JWT 看起来如下图 该对象为一个很长的字符串字符之间通过.分隔符分为三个子串。每一个子串表示了一个功能块总共有以下三个部分JWT 头、有效载荷和签名
① JWT 头
JWT 头部分是一个描述 JWT 元数据的 JSON 对象通常如下所示
{alg: HS256,typ: JWT
}在上面的代码中alg属性表示签名使用的算法默认为 HMAC SHA256写为HS256typ 属性表示令牌的类型JWT 令牌统一写为 JWT。最后使用 Base64 URL 算法将上述JSON对象转换为字符串保存。 ② 有效载荷
有效载荷部分是 JWT 的主体内容部分也是一个JSON 对象包含需要传递的数据。 JWT 指定七个默认字段供选择。
sub: 主题iss: jwt 签发者aud: 接收 jwt 的一方iat: jwt 的签发时间exp: jwt 的过期时间这个过期时间必须要大于签发时间nbf: 定义在什么时间之前该 jwt 都是不可用的jti: jwt 的唯一身份标识主要用来作为一次性 token从而回避重放攻击。
除以上默认字段外我们还可以自定义私有字段如下例
{name: Helen,admin: true,avatar: helen.jpg
}请注意默认情况下 JWT 是未加密的任何人都可以解读其内容因此不要构建隐私信息字段存放保密信息以防止信息泄露。
JSON 对象也使用 Base64 URL 算法转换为字符串保存。 ③ 签名哈希
签名哈希部分是对上面两部分数据签名通过指定的算法生成哈希以确保数据不会被篡改。
首先需要指定一个密码secret。该密码仅仅为保存在服务器中并且不能向用户公开。然后使用标头中指定的签名算法默认情况下为HMAC SHA256根据以下公式生成签名。
HMACSHA256(base64UrlEncode(header) “.” base64UrlEncode(claims), secret) 签名hash 在计算出签名哈希后JWT头有效载荷和签名哈希的三个部分组合成一个字符串每个部分用.分隔就构成整个JWT对象。
如前所述JWT头和有效载荷序列化的算法都用到了Base64URL。该算法和常见Base64算法类似稍有差别。
作为令牌的JWT可以放在URL中例如api.example/?tokenxxx。 Base64中用的三个字符是“”/“和”“由于在URL中有特殊含义因此Base64URL中对他们做了替换”“去掉”“用”-“替换”/“用”_替换这就是Base64URL算法。 注意base64编码并不是加密只是把明文信息变成了不可见的字符串。但是其实只要用一些工具就可以把base64编码解成明文所以不要在JWT中放入涉及私密的信息。 2.3 JWT 问题和趋势
JWT 默认不加密但可以加密。生成原始令牌后可以使用该令牌再次对其进行加密。当 JWT 未加密时一些私密数据无法通过 JWT 传输。JWT 不仅可用于认证还可用于信息交换。善用 JWT 有助于减少服务器请求数据库的次数。JWT 的最大缺点是服务器不保存会话状态所以在使用期间不可能取消令牌或更改令牌的权限。也就是说一旦 JWT 签发在有效期内将会一直有效。JWT 本身包含认证信息因此一旦信息泄露任何人都可以获得令牌的所有权限。为了减少盗用JWT 的有效期不宜设置太长。对于某些重要操作用户在使用时应该每次都进行身份验证。为了减少盗用和窃取JWT 不建议使用 HTTP 协议来传输代码而是使用加密的 HTTPS 协议进行传输。
2.4 JWT 测试
引入依赖
dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.7.0/version
/dependency生成token
public class JwtTests {//过期时间毫秒24小时private static long tokenExpiration 24*60*60*1000;//秘钥private static String tokenSignKey hc123;Testpublic void testCreateToken(){String token Jwts.builder().setHeaderParam(typ, JWT) //令牌类型.setHeaderParam(alg, HS256) //签名算法.setSubject(hc-user) //令牌主题.setIssuer(hc)//签发者.setAudience(hc)//接收者.setIssuedAt(new Date())//签发时间.setExpiration(new Date(System.currentTimeMillis() tokenExpiration)) //过期时间.setNotBefore(new Date(System.currentTimeMillis() 20*1000)) //20秒后可用.setId(UUID.randomUUID().toString()).claim(nickname, hc).claim(avatar, 1.jpg).signWith(SignatureAlgorithm.HS256, tokenSignKey)//签名哈希.compact(); //转换成字符串System.out.println(token);}
}解析 token
Test
public void testGetUserInfo(){String token jwt字符串;JwsClaims claimsJws Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);Claims claims claimsJws.getBody();String subject claims.getSubject();String issuer claims.getIssuer();String audience claims.getAudience();Date issuedAt claims.getIssuedAt();Date expiration claims.getExpiration();Date notBefore claims.getNotBefore();String id claims.getId();System.out.println(subject);System.out.println(issuer);System.out.println(audience);System.out.println(issuedAt);System.out.println(expiration);System.out.println(notBefore);System.out.println(id);;String nickname (String)claims.get(nickname);String avatar (String)claims.get(avatar);System.out.println(nickname);System.out.println(avatar);
}
文章转载自: http://www.morning.tfkqc.cn.gov.cn.tfkqc.cn http://www.morning.skqfx.cn.gov.cn.skqfx.cn http://www.morning.kdnrp.cn.gov.cn.kdnrp.cn http://www.morning.mjats.com.gov.cn.mjats.com http://www.morning.hrtfz.cn.gov.cn.hrtfz.cn http://www.morning.dpqwq.cn.gov.cn.dpqwq.cn http://www.morning.qnbgk.cn.gov.cn.qnbgk.cn http://www.morning.fbbpj.cn.gov.cn.fbbpj.cn http://www.morning.frpb.cn.gov.cn.frpb.cn http://www.morning.qkbwd.cn.gov.cn.qkbwd.cn http://www.morning.nqpy.cn.gov.cn.nqpy.cn http://www.morning.trnhy.cn.gov.cn.trnhy.cn http://www.morning.lktjj.cn.gov.cn.lktjj.cn http://www.morning.c7495.cn.gov.cn.c7495.cn http://www.morning.tymwx.cn.gov.cn.tymwx.cn http://www.morning.wbysj.cn.gov.cn.wbysj.cn http://www.morning.gyylt.cn.gov.cn.gyylt.cn http://www.morning.lpnb.cn.gov.cn.lpnb.cn http://www.morning.nrpp.cn.gov.cn.nrpp.cn http://www.morning.ykgp.cn.gov.cn.ykgp.cn http://www.morning.mhcft.cn.gov.cn.mhcft.cn http://www.morning.qgmwt.cn.gov.cn.qgmwt.cn http://www.morning.kflbf.cn.gov.cn.kflbf.cn http://www.morning.pycpt.cn.gov.cn.pycpt.cn http://www.morning.pxrfm.cn.gov.cn.pxrfm.cn http://www.morning.xqkcs.cn.gov.cn.xqkcs.cn http://www.morning.fewhope.com.gov.cn.fewhope.com http://www.morning.pjwrl.cn.gov.cn.pjwrl.cn http://www.morning.blqmn.cn.gov.cn.blqmn.cn http://www.morning.hwycs.cn.gov.cn.hwycs.cn http://www.morning.mhnd.cn.gov.cn.mhnd.cn http://www.morning.wnqbf.cn.gov.cn.wnqbf.cn http://www.morning.mjyrg.cn.gov.cn.mjyrg.cn http://www.morning.rchsr.cn.gov.cn.rchsr.cn http://www.morning.dgpxp.cn.gov.cn.dgpxp.cn http://www.morning.vvbsxm.cn.gov.cn.vvbsxm.cn http://www.morning.kqgqy.cn.gov.cn.kqgqy.cn http://www.morning.fkgcd.cn.gov.cn.fkgcd.cn http://www.morning.jqpyq.cn.gov.cn.jqpyq.cn http://www.morning.4r5w91.cn.gov.cn.4r5w91.cn http://www.morning.pmftz.cn.gov.cn.pmftz.cn http://www.morning.rpfpx.cn.gov.cn.rpfpx.cn http://www.morning.hysqx.cn.gov.cn.hysqx.cn http://www.morning.lfxcj.cn.gov.cn.lfxcj.cn http://www.morning.gmysq.cn.gov.cn.gmysq.cn http://www.morning.rzscb.cn.gov.cn.rzscb.cn http://www.morning.cnvlog.cn.gov.cn.cnvlog.cn http://www.morning.xlndf.cn.gov.cn.xlndf.cn http://www.morning.hyjpl.cn.gov.cn.hyjpl.cn http://www.morning.zmlbq.cn.gov.cn.zmlbq.cn http://www.morning.qlhkx.cn.gov.cn.qlhkx.cn http://www.morning.gcjhh.cn.gov.cn.gcjhh.cn http://www.morning.zffn.cn.gov.cn.zffn.cn http://www.morning.rsmtx.cn.gov.cn.rsmtx.cn http://www.morning.wflpj.cn.gov.cn.wflpj.cn http://www.morning.cjnfb.cn.gov.cn.cjnfb.cn http://www.morning.yrmpr.cn.gov.cn.yrmpr.cn http://www.morning.dyzbt.cn.gov.cn.dyzbt.cn http://www.morning.lrzst.cn.gov.cn.lrzst.cn http://www.morning.qnzgr.cn.gov.cn.qnzgr.cn http://www.morning.hnkkm.cn.gov.cn.hnkkm.cn http://www.morning.xtqr.cn.gov.cn.xtqr.cn http://www.morning.tbnn.cn.gov.cn.tbnn.cn http://www.morning.nkbfc.cn.gov.cn.nkbfc.cn http://www.morning.tlpsd.cn.gov.cn.tlpsd.cn http://www.morning.prprz.cn.gov.cn.prprz.cn http://www.morning.fstesen.com.gov.cn.fstesen.com http://www.morning.tfrmx.cn.gov.cn.tfrmx.cn http://www.morning.wrlcy.cn.gov.cn.wrlcy.cn http://www.morning.rxhsm.cn.gov.cn.rxhsm.cn http://www.morning.nnmnz.cn.gov.cn.nnmnz.cn http://www.morning.rqkk.cn.gov.cn.rqkk.cn http://www.morning.llqch.cn.gov.cn.llqch.cn http://www.morning.cwkcq.cn.gov.cn.cwkcq.cn http://www.morning.xscpq.cn.gov.cn.xscpq.cn http://www.morning.bpmnz.cn.gov.cn.bpmnz.cn http://www.morning.rrcxs.cn.gov.cn.rrcxs.cn http://www.morning.iznek.com.gov.cn.iznek.com http://www.morning.qnbzs.cn.gov.cn.qnbzs.cn http://www.morning.nlnmy.cn.gov.cn.nlnmy.cn