当前位置: 首页 > news >正文

源码搭建网站流程稿定设计官网首页

源码搭建网站流程,稿定设计官网首页,wordpress 在线音乐播放器,建设网站怎么添加端口映射JSON Web Token 1、什么是JWT2、JWT解决了什么问题3、早期的SSO认证4、JWT认证5、JWT优势6、JWT结构Header 标头Payload 负载 Signature 签名 7、代码实现添加依赖生成Token认证token 8、工具类9、JWT整合Web10、拦截器校验11、网关路由校验12、解决多用户登录的问题13、客户端… JSON Web Token 1、什么是JWT2、JWT解决了什么问题3、早期的SSO认证4、JWT认证5、JWT优势6、JWT结构Header 标头Payload 负载 Signature 签名 7、代码实现添加依赖生成Token认证token 8、工具类9、JWT整合Web10、拦截器校验11、网关路由校验12、解决多用户登录的问题13、客户端保存/携带token14、抽取ajax工具类15、a标签跳转如何传递token 1、什么是JWT 官方文档解释JSON Web TokenJWT是一个开放标准RFC 7519它定义了一种紧凑且独立的方式可以在各方之间作为JSON对象安全地传输信息。此信息可以通过数字签名进行验证和信任。JWT可以使用秘密使用HMAC算法或使用RSA或ECDSA的公钥/私钥对进行签名。 官网地址: https://jwt.io/introduction/ 通俗来讲JWT是一个含签名并携带用户相关信息的加密串页面请求校验登录接口时客户端请求头中携带JWT串到后端服务后端通过签名加密串匹配校验保证信息未被篡改。校验通过则认为是可靠的请求将正常返回数据。 2、JWT解决了什么问题 授权这是最常见的使用场景解决单点登录问题。因为JWT使用起来轻便开销小服务端不用记录用户状态信息无状态所以使用比较广泛信息交换JWT是在各个服务之间安全传输信息的好方法。因为JWT可以签名例如使用公钥/私钥是以对儿 - 可以确定请求方是合法的。此外由于使用标头和有效负载计算签名还可以验证内容是否未被篡改。 3、早期的SSO认证 我们知道http协议本身是一种无状态的协议而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证那么下一次请求时用户还要再一次进行用户认证才行因为根据http协议我们并不能知道是哪个用户发出的请求所以为了让我们的应用能识别是哪个用户发出的请求我们只能在服务器存储一份用户登录的信息这份登录信息会在响应时传递给浏览器告诉其保存为cookie,以便下次请求时发送给我们的应用这样我们的应用就能识别请求来自哪个用户了,这就是传统的基于session认证。 4、JWT认证 首先前端通过Web表单将自己的用户名和密码发送到后端的接口。这一过程一般是一个HTTP POST请求。建议的方式是通过SSL加密的传输https协议。 后端核对用户名和密码成功后将用户的id等其他信息作为JWT Payload负载将其与头部分别进行Base64编码拼接后签名形成一个JWT(Token)。形成的JWT就是一个形同aaaa.bbb.cc的字符串。 token head.payload.singurater。 后端将JWT字符串作为登录成功的返回结果返回给前端。前端可以将返回的结果保存在localStorage或sessionStorage上退出登录时前端删除保存的JWT即可。 前端在每次请求时将JWT放入HTTP Header中的Authorization位。(解决XSS和XSRF问题) HEADER。 后端检查是否存在如存在验证JWT的有效性。例如检查签名是否正确检查Token是否过期检查Token的接收方是否是自己可选。 验证通过后后端使用JWT中包含的用户信息进行其他逻辑操作返回相应结果。 5、JWT优势 JWT 是一个开放标准(RFC 7519)它定义了一种用于简洁自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。它具备两个特点 简洁(Compact) 可以通过URL, POST 参数或者在 HTTP header 发送因为数据量小传输速度快。 自包含(Self-contained) 负载中包含了所有用户所需要的信息避免了多次查询数据库。 自校验 对token可以自己校验是否过期。 6、JWT结构 令牌组成 标头(Header)有效载荷(Payload)签名(Signature) Header 标头 ​ 标头通常由两部分组成令牌的类型即JWT和所使用的签名算法。它会使用 Base64 对header做编码组成而来JWT结构的第一部分。 Base64是一种编码也就是说它是可以被翻译回原来的样子来的。它并不是一种加密过程。 {alg: HS256, # 签名算法typ: JWT # 类型 }Payload 负载 ​ 这部分就是我们存放信息的地方了你可以把用户 ID 等信息放在这里JWT 规范里面对这部分有进行了比较详细的介绍常用的由 iss签发者exp过期时间sub面向的用户aud接收方iat签发时间。同样的它也会使用 Base64 编码组成 JWT 结构的第二部分。 {iss: demo JWT,iat: 1342513302,exp: 1342513302,name: admin,sub: dev }Signature 签名 前面两部分都是使用 Base64 进行编码的即前端可以解开知道里面的信息。Signature 需要使用编码后的 header 和 payload 以及我们提供的一个密钥然后使用 header 中指定的签名算法HS256进行签名。签名的作用是保证 JWT 没有被篡改过。 三个部分通过.连接在一起就是我们的 JWT 了 签名的目的 最后一步签名的过程实际上是对头部以及负载内容进行签名防止内容被窜改。如果有人对头部以及负载的内容解码之后进行修改再进行编码最后加上之前的签名组合形成新的JWT的话那么服务器端会判断出新的头部和负载形成的签名和JWT附带上的签名是不一样的。如果要对新的头部和负载进行签名在不知道服务器加密时用的密钥的话得出来的签名也是不一样的。 信息安全性 在这里大家一定会问一个问题Base64是一种编码是可逆的那么我的信息不就被暴露了吗 是的。所以在JWT中不应该在负载里面加入任何敏感的数据。在上面的例子中我们传输的是用户的User ID。这个值实际上不是什么敏感内容一般情况下被知道也是安全的。但是像密码这样的内容就不能被放在JWT中了。如果将用户的密码放在了JWT中那么怀有恶意的第三方通过Base64解码就能很快地知道你的密码了。 因此JWT适合用于向Web应用传递一些非敏感信息。JWT还经常用于设计用户认证和授权系统甚至实现Web应用的单点登录。 7、代码实现 添加依赖 dependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion3.4.0/version/dependency生成Token Testvoid testCreateToken() {// 1.设置超时时间Calendar calendar Calendar.getInstance();calendar.add(Calendar.SECOND,30); // 超时时间是30s// 2.创建JWTbuilderJWTCreator.Builder builder JWT.create();// 3.设置头负载签名String token builder // .withHeader(map) 设置头信息可以不设置有默认值.withClaim(name, admin).withClaim(id, 10) // 设置用户自定义属性.withExpiresAt(calendar.getTime()) // 设置令牌超时时间.sign(Algorithm.HMAC256(dalaoshi));// 设置用户签名// 4.输出结果System.out.println(token);}认证token String token eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiYWRtaW4iLCJpZCI6MTAsImV4cCI6MTU5OTQwNTQ2NH0.7YFYieOC-ChS32He7DqyVtECCvM4nFWmb7hKLiPAIXY\n;// 1.根据用户签签名获取JTW校验器JWTVerifier jwtVerifier JWT.require(Algorithm.HMAC256(dalaoshi)).build();// 2.验证tokenDecodedJWT verify jwtVerifier.verify(token);// 3.获取token的数据System.out.println(verify.getClaim(name).asString()); // 字符串使用asString()System.out.println(verify.getClaim(id).asInt()); // int使用asIntSystem.out.println(verify.getExpiresAt()); // 获取过期时间认证常见的异常 - SignatureVerificationException: 签名不一致异常 - TokenExpiredException: 令牌过期异常 - AlgorithmMismatchException: 算法不匹配异常 - InvalidClaimException: 失效的payload异常8、工具类 public class JWTUtils {private static String sign dalaoshi;public static String createToken(MapString, String map) {// 1.设置超时时间Calendar calendar Calendar.getInstance();calendar.add(Calendar.DATE, 7); // 7天// 2.创建JWTbuilderJWTCreator.Builder builder JWT.create();// 设置负载数据SetMap.EntryString, String entries map.entrySet();for (Map.EntryString, String entrie : entries) {builder.withClaim(entrie.getKey(), entrie.getValue());}// 3.设置签名过期时间String token builder.withExpiresAt(calendar.getTime()) // 设置令牌超时时间.sign(getSignature());// 设置用户签名// 4.返回return token;}// 获取起签名public static Algorithm getSignature() {return Algorithm.HMAC256(sign);}// 校验public static DecodedJWT require(String token) {return JWT.require(getSignature()).build().verify(token);}// 获取token中的数据public static Claim getPayload(String token, String key) {return require(token).getClaim(key);} }9、JWT整合Web Autowiredprivate IUserService userService;RequestMapping(/login)public ResultEntity login(String username,String password){ResultEntity resultEntity userService.login(username, password);if(ResultEntity.SUCEESS.equals(resultEntity.getStatus())){MapString,String map new HashMap();map.put(id,10);map.put(username,username);String token JWTUtils.createToken(map);return ResultEntity.success(token);}else{return ResultEntity.error(登录失败);}}RequestMapping(/require)public ResultEntity require(String token){try {DecodedJWT require JWTUtils.require(token);return ResultEntity.response(require);}catch (TokenExpiredException e){return ResultEntity.error(token过期);}catch (SignatureVerificationException e){return ResultEntity.error(用户签名不一致);} catch (InvalidClaimException e){return ResultEntity.error(payload数据有误);}catch (Exception e){return ResultEntity.error(校验失败);}}RequestMapping(value /getPayLoad)public ResultEntity getPayLoad(String token){DecodedJWT decodedJWT JWTUtils.require(token);MapString, Claim claims decodedJWT.getClaims();MapString,String map new HashMap();SetMap.EntryString, Claim entries claims.entrySet();for (Map.EntryString, Claim entrie:entries) {map.put(entrie.getKey(),entrie.getValue().asString());}return ResultEntity.success(map);}10、拦截器校验 Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 1.获取tokenString token request.getHeader(token);MapString,Object map new HashMap();try {// 2.校验JWTUtils.verify(token);return true;}catch (TokenExpiredException e){return ResultEntity.error(token过期);}catch (SignatureVerificationException e){return ResultEntity.error(用户签名不一致);} catch (InvalidClaimException e){return ResultEntity.error(payload数据有误);}catch (Exception e){return ResultEntity.error(校验失败);}// 3.校验失败响应数据String json new ObjectMapper().writeValueAsString(map);response.setContentType(application/json;charsetUTF-8);response.getWriter().println(json);return false; }11、网关路由校验 Component public class SSOFilter extends ZuulFilter{Autowiredprivate ISSOService ssoService;Overridepublic String filterType() {return FilterConstants.PRE_TYPE;}Overridepublic int filterOrder() {return FilterConstants.PRE_DECORATION_FILTER_ORDER-1;}Overridepublic boolean shouldFilter() {return true;}Overridepublic Object run() throws ZuulException {RequestContext requestContext RequestContext.getCurrentContext();HttpServletRequest request requestContext.getRequest();StringBuffer requestURL request.getRequestURL();System.out.println(requestURL);// 1.该服务是否需要验证if(http://localhost/shop-back/user/getUserPage.equals(requestURL.toString())){String token request.getHeader(token);// 2.验证服务ResultEntity resultEntity ssoService.require(token);System.out.println(resultEntity);if(!ResultEntity.SUCEESS.equals(resultEntity.getStatus())){requestContext.setSendZuulResponse(false); // 不能往下执行了HttpServletResponse response requestContext.getResponse();response.setContentType(application/json;charsetutf-8); // 设置响应数据类型requestContext.setResponseBody(JSON.toJSONString(ResultEntity.error(校验未通过))); // 设置响应数据}}return null;} }12、解决多用户登录的问题 如果一个用户登录在多个设备登录就会出现一个用户多个token在多个设备上同时登录。如果要解决这个问题就要判断用户操作的token是否是最新的只有是最新的token才能认证成功。 // 伪代码// login public String login(String name,String password){// 1.查询数据库认证// 2.生成tokenString token ;// 3.把用户最新的token放入到reids中redisTemp.set(username,token); // username作为key多次登录key会被覆盖 }// 路由校验// 1.获取用户token // 2.根据用户名查询用户最新的token // 3.对比两个token是否一致如果不一致就说明用户进行了第二次登陆就不让认证通过。13、客户端保存/携带token // 登录获取token保存到本地 function login(){var username admin;var password 123;var param new Object();param.usernameusername;param.passwordpassword;$.post(http://localhost/shop-sso/sso/login,param,function (data) {if(data.status success){// 获取tokenvar token data.data;// 保存toke到客户端localStorage.setItem(login-token,token);}},JSON);}// 发送请求是把token放到请求头中保存function sendRequest(){$.ajax({url: http://localhost/shop-sso/addXxxxx,type: post,dataType: json,beforeSend: function (XMLHttpRequest) {// 获取本地储存的token添加到请求头中XMLHttpRequest.setRequestHeader(Authorization, localStorage.getItem(login-token));},success: function (result) {}});}为什么要把token放在请求头中的Authorization中 a)保存在请求头中方便和其他参数区分 b)保存在请求头中可以解决跨域的问题比如cookie是存在跨域的问题 c)Authorization header就是为用户认证而生的。 d)解决XSS和XSRF问题 14、抽取ajax工具类 window.utils{ajax:function(param){$.ajax({url: param,type: post,dataType: json,data:param.data,beforeSend: function (XMLHttpRequest) {XMLHttpRequest.setRequestHeader(Authorization, localStorage.getItem(login-token));},success: function (result) {param.success(result);}});} }// 调用 utils.ajax({url:http://localhost/shop-sso/sso/login,data:param,success:function(data){if(data.status success){// 获取tokenvar token data.data;// 保存toke到客户端localStorage.setItem(login-token,token);}} })15、a标签跳转如何传递token token只针对api设计和原生标签的跳转没有直接的关系。如果请求跳转可以在url后面携带token。 后记 美好的一天到此结束下次继续努力欲知后续请看下回分解写作不易感谢大家的支持
文章转载自:
http://www.morning.djxnn.cn.gov.cn.djxnn.cn
http://www.morning.wwkft.cn.gov.cn.wwkft.cn
http://www.morning.qkqhr.cn.gov.cn.qkqhr.cn
http://www.morning.gbnsq.cn.gov.cn.gbnsq.cn
http://www.morning.krdmn.cn.gov.cn.krdmn.cn
http://www.morning.crkhd.cn.gov.cn.crkhd.cn
http://www.morning.rwbh.cn.gov.cn.rwbh.cn
http://www.morning.qsmch.cn.gov.cn.qsmch.cn
http://www.morning.mtrz.cn.gov.cn.mtrz.cn
http://www.morning.rkyw.cn.gov.cn.rkyw.cn
http://www.morning.smpmn.cn.gov.cn.smpmn.cn
http://www.morning.dmlsk.cn.gov.cn.dmlsk.cn
http://www.morning.htbbp.cn.gov.cn.htbbp.cn
http://www.morning.gpcy.cn.gov.cn.gpcy.cn
http://www.morning.zmyhn.cn.gov.cn.zmyhn.cn
http://www.morning.mlbdr.cn.gov.cn.mlbdr.cn
http://www.morning.dwhnb.cn.gov.cn.dwhnb.cn
http://www.morning.rxtxf.cn.gov.cn.rxtxf.cn
http://www.morning.yzmzp.cn.gov.cn.yzmzp.cn
http://www.morning.qrlsy.cn.gov.cn.qrlsy.cn
http://www.morning.ffksr.cn.gov.cn.ffksr.cn
http://www.morning.wfhnz.cn.gov.cn.wfhnz.cn
http://www.morning.mtmnk.cn.gov.cn.mtmnk.cn
http://www.morning.lgtcg.cn.gov.cn.lgtcg.cn
http://www.morning.rkbly.cn.gov.cn.rkbly.cn
http://www.morning.zdgp.cn.gov.cn.zdgp.cn
http://www.morning.xqltq.cn.gov.cn.xqltq.cn
http://www.morning.jzklb.cn.gov.cn.jzklb.cn
http://www.morning.sqtsl.cn.gov.cn.sqtsl.cn
http://www.morning.rkkpr.cn.gov.cn.rkkpr.cn
http://www.morning.gyylt.cn.gov.cn.gyylt.cn
http://www.morning.srltq.cn.gov.cn.srltq.cn
http://www.morning.kgltb.cn.gov.cn.kgltb.cn
http://www.morning.pdxqk.cn.gov.cn.pdxqk.cn
http://www.morning.yqfdl.cn.gov.cn.yqfdl.cn
http://www.morning.rwzmz.cn.gov.cn.rwzmz.cn
http://www.morning.pgggs.cn.gov.cn.pgggs.cn
http://www.morning.llfwg.cn.gov.cn.llfwg.cn
http://www.morning.bsbcp.cn.gov.cn.bsbcp.cn
http://www.morning.cfcpb.cn.gov.cn.cfcpb.cn
http://www.morning.rdtq.cn.gov.cn.rdtq.cn
http://www.morning.wphzr.cn.gov.cn.wphzr.cn
http://www.morning.ljwyc.cn.gov.cn.ljwyc.cn
http://www.morning.qpntn.cn.gov.cn.qpntn.cn
http://www.morning.bxqtq.cn.gov.cn.bxqtq.cn
http://www.morning.dfmjm.cn.gov.cn.dfmjm.cn
http://www.morning.ffgbq.cn.gov.cn.ffgbq.cn
http://www.morning.kbdjn.cn.gov.cn.kbdjn.cn
http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn
http://www.morning.lhxrn.cn.gov.cn.lhxrn.cn
http://www.morning.qqpg.cn.gov.cn.qqpg.cn
http://www.morning.rjynd.cn.gov.cn.rjynd.cn
http://www.morning.cbndj.cn.gov.cn.cbndj.cn
http://www.morning.cytr.cn.gov.cn.cytr.cn
http://www.morning.dzdtj.cn.gov.cn.dzdtj.cn
http://www.morning.rnht.cn.gov.cn.rnht.cn
http://www.morning.ygrkg.cn.gov.cn.ygrkg.cn
http://www.morning.pcgrq.cn.gov.cn.pcgrq.cn
http://www.morning.nytpt.cn.gov.cn.nytpt.cn
http://www.morning.tlfyb.cn.gov.cn.tlfyb.cn
http://www.morning.hjbrd.cn.gov.cn.hjbrd.cn
http://www.morning.xrrjb.cn.gov.cn.xrrjb.cn
http://www.morning.fsbns.cn.gov.cn.fsbns.cn
http://www.morning.tndhm.cn.gov.cn.tndhm.cn
http://www.morning.pxlql.cn.gov.cn.pxlql.cn
http://www.morning.nywrm.cn.gov.cn.nywrm.cn
http://www.morning.pyzt.cn.gov.cn.pyzt.cn
http://www.morning.sxhdzyw.com.gov.cn.sxhdzyw.com
http://www.morning.fpngg.cn.gov.cn.fpngg.cn
http://www.morning.tbnn.cn.gov.cn.tbnn.cn
http://www.morning.rqjxc.cn.gov.cn.rqjxc.cn
http://www.morning.ptmgq.cn.gov.cn.ptmgq.cn
http://www.morning.jfjbl.cn.gov.cn.jfjbl.cn
http://www.morning.drswd.cn.gov.cn.drswd.cn
http://www.morning.bwttp.cn.gov.cn.bwttp.cn
http://www.morning.xbyyd.cn.gov.cn.xbyyd.cn
http://www.morning.tlnkz.cn.gov.cn.tlnkz.cn
http://www.morning.tldfp.cn.gov.cn.tldfp.cn
http://www.morning.zrgsg.cn.gov.cn.zrgsg.cn
http://www.morning.hsjrk.cn.gov.cn.hsjrk.cn
http://www.tj-hxxt.cn/news/262898.html

相关文章:

  • 展示网站报价方案推广链接打开
  • 泰安网站seo推广怎么把本地wordpress上传到服务器
  • 如何创建网站站点并且避免广告创建网页需要多少钱
  • 建设银行长春网站做养生的网站多吗
  • 汤原建设局网站网站301是什么意思
  • 西安专业做网站的营销软件app
  • 教学平台网站建设合同做婚礼网站的公司
  • wordpress站标签也打不开网页设计与制作解答题
  • 做企业网站用哪个cms医疗网站建设行业现状和影响
  • 我现在有域名怎么做网站广州app开发公司排名十强
  • 网站自动更新网页设计作业html代码大全
  • wordpress制作分销网站一般通过什么渠道了解防灾减灾知识?(可多选)
  • 淘宝建设网站的全免费源码网
  • 网站备案填写网站名称广州网站公司建设
  • 网络网站推广首荐乐云seo挖掘爱站网
  • 昌平区网站建设公司seo搜索优化公司
  • 微信插件大全下载志鸿优化设计
  • 大丰哪家专业做网站网站头图设计
  • 网站初始开发的步骤做电影网站资源哪里来的
  • 做资源网站怎么赚钱合肥 企业网站设计公司
  • 东莞网站设计制作app运营费用
  • html 路径 网站根路径怎么重新设置wordpress
  • 海南创作什么网站公司网站怎么写
  • 东莞网站建设是什么工程 建筑 公司 取名 参考
  • 万江区做网站网络营销推广内容
  • 可以免费做网站吗网站开发大数据库
  • 建筑方面的网站聊城网站建设潍坊
  • 百度站长平台网站体检滨州公司做网站
  • 有一个做ppt的网站html 5电影网站源码
  • 稳定的网站制作需要多少钱帮人做彩票网站