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

node.js网站开发百度seo关键词排名优化软件

node.js网站开发,百度seo关键词排名优化软件,互联网哪个行业前景好,网上花店网页设计代码什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准#xff08;(RFC 7519).该token被设计为紧凑且安全的#xff0c;特别适用于分布式站点的单点登录#xff08;SSO#xff09;场景。JWT的声明一般被用来在身份提供者和服务提…什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519).该token被设计为紧凑且安全的特别适用于分布式站点的单点登录SSO场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息以便于从资源服务器获取资源也可以增加一些额外的其它业务逻辑所必须的声明信息该token也可直接被用于认证也可被加密。 基于token的认证和传统的session认证的区别 传统的session认证 我们知道http协议本身是一种无状态的协议而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证那么下一次请求时用户还要再一次进行用户认证才行因为根据http协议我们并不能知道是哪个用户发出的请求所以为了让我们的应用能识别是哪个用户发出的请求我们只能在服务器存储一份用户登录的信息这份登录信息会在响应时传递给浏览器告诉其保存为cookie,以便下次请求时发送给我们的应用这样我们的应用就能识别请求来自哪个用户了,这就是传统的基于session认证。 但是这种基于session的认证使应用本身很难得到扩展随着不同客户端用户的增加独立的服务器已无法承载更多的用户而这时候基于session认证应用的问题就会暴露出来. 基于session认证所显露的问题 Session: 每个用户经过我们的应用认证之后我们的应用都要在服务端做一次记录以方便用户下次请求的鉴别通常而言session都是保存在内存中而随着认证用户的增多服务端的开销会明显增大。 扩展性: 用户认证之后服务端做认证记录如果认证的记录被保存在内存中的话这意味着用户下次请求还必须要请求在这台服务器上,这样才能拿到授权的资源这样在分布式的应用上相应的限制了负载均衡器的能力。这也意味着限制了应用的扩展能力。 CSRF: 因为是基于cookie来进行用户识别的, cookie如果被截获用户就会很容易受到跨站请求伪造的攻击。 基于token的鉴权机制 基于token的鉴权机制类似于http协议也是无状态的它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了这就为应用的扩展提供了便利。 流程上是这样的 • 用户使用用户名密码来请求服务器 • 服务器进行验证用户的信息 • 服务器通过验证发送给用户一个token • 客户端存储token并在每次请求时附送上这个token值 • 服务端验证token值并返回数据 这个token必须要在每次请求时传递给服务端它应该保存在请求头里 另外服务端要支持CORS(跨来源资源共享)策略一般我们在服务端这么做就可以了*Access-Control-Allow-Origin: 。 JWT的组成: JWT是由三段信息构成的将这三段信息文本用.链接一起就构成了Jwt字符串。 在这里插入代码片第一部分我们称它为头部header),第二部分我们称其为载荷payload, 类似于飞机上承载的物品)第三部分是签证signature). header jwt的头部承载两部分信息 • 声明类型这里是jwt • 声明加密的算法 通常直接使用 HMAC SHA256 playload 载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品这些有效信息包含三个部分 • 标准中注册的声明 • 公共的声明 • 私有的声明 signature jwt的第三部分是一个签证信息这个签证信息由三部分组成 • header (base64后的) • payload (base64后的) • secret 这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串然后通过header中声明的加密方式进行加盐secret组合加密然后就构成了jwt的第三部分。 将这三部分用.连接成一个完整的字符串,构成了最终的jwt: 在这里插入代码片注意secret是保存在服务器端的jwt的签发生成也是在服务器端的secret就是用来进行jwt的签发和jwt的验证所以它就是你服务端的私钥在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。 优点 • 因为json的通用性所以JWT是可以进行跨语言支持的像JAVA,JavaScript,NodeJS,PHP等很多语言都可以使用。 • 因为有了payload部分所以JWT可以在自身存储一些其他业务逻辑所必要的非敏感信息。 • 便于传输jwt的构成非常简单字节占用很小所以它是非常便于传输的。 • 它不需要在服务端保存会话信息, 所以它易于应用的扩展 安全相关 • 不应该在jwt的payload部分存放敏感信息因为该部分是客户端可解密的部分。 • 保护好secret私钥该私钥非常重要。 • 如果可以请使用https协议 如何应用 一导入依赖 !--实现方式一java-jwt --dependencygroupIdcom.auth0/groupIdartifactIdjava-jwt/artifactIdversion3.11.0/version/dependency!--实现方式二jjwt--dependencygroupIdio.jsonwebtoken/groupIdartifactIdjjwt/artifactIdversion0.9.0/version/dependency 实现方式一JWT的测试类 package comzuxia;import com.auth0.jwt.JWT; import com.auth0.jwt.JWTCreator; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.DecodedJWT; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;import java.util.Calendar;SpringBootTest class JwrloginApplicationTests {//HMAC256是摘要算法跟md5类似只是这个歌HMAC256需要制定key而已salt盐String keypgg123456;/*** 测试java-jwt生成token字符串*/Testpublic void testGenerateToken(){Calendar calendarCalendar.getInstance();calendar.add(Calendar.SECOND,60);//设置过期时间JWTCreator.Builder builder JWT.create()//payload的内容由一个个的claim组成.withClaim(userId, 123).withClaim(userName, Java).withClaim(url, http://www.roadjava.com).withExpiresAt(calendar.getTime());String token builder.sign(Algorithm.HMAC256(key));//设置签名参数为加密算法算法的参数key(salt盐)System.out.println(token);} 实现方式二JJWT的测试类 package comzuxia;import com.auth0.jwt.JWT; import com.auth0.jwt.JWTCreator; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.Claim; import com.auth0.jwt.interfaces.DecodedJWT; import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;import java.util.Calendar; import java.util.HashMap; import java.util.Map;SpringBootTest class JJWTTest {//HMAC256是摘要算法跟md5类似只是这个歌HMAC256需要制定key而已salt盐String keypgg123456;/*** 测试java-jwt生成token字符串*/Testpublic void testGenerateToken(){//过期时间Calendar calendarCalendar.getInstance();calendar.add(Calendar.SECOND,60*60);//设置过期时间//创建payload的私有声明根据业务需要添加MapString,Object claimsnew HashMap();claims.put(userId, 123);claims.put(userName, Java);claims.put(url, http://www.roadjava.com);JwtBuilder builder Jwts.builder()//payload的内容由一个个的claim组成.setClaims(claims).setExpiration(calendar.getTime())//设置签名使用的签名算法和签名使用的秘钥.signWith(SignatureAlgorithm.HS256,key);String compact builder.compact();System.out.println(compact);}/*** 校验*/Testpublic void testVerigy(){String tokeneyJhbGciOiJIUzI1NiJ9.eyJ1c2VyTmFtZSI6IkphdmEiLCJleHAiOjE2MzcyMjk1NzIsInVzZXJJZCI6MTIzLCJ1cmwiOiJodHRwOi8vd3d3LnJvYWRqYXZhLmNvbSJ9.5i1cXxMQdCBWtNDtwH1M69XbHX3EWpOqQUnmTGwExZo;Claims claimsJwts.parser()//得到DefaultJwtParser.setSigningKey(key) //设置签名的秘钥.parseClaimsJws(token).getBody();//设置需要解析的jwtInteger userid claims.get(userid,Integer.class);String userNameclaims.get(userName,String.class);String urlclaims.get(url,String.class);System.out.println(userid:userid);System.out.println(userName:userName);System.out.println(url:url);} } 二编写工具类 JWT的工具类 package comzuxia.util;import com.alibaba.fastjson.JSON; import com.auth0.jwt.JWT; import com.auth0.jwt.JWTCreator; import com.auth0.jwt.algorithms.Algorithm; import com.auth0.jwt.interfaces.Claim; import com.auth0.jwt.interfaces.DecodedJWT; import comzuxia.bean.UserInfo; import java.util.Calendar;/*** jwt实现的方式*/ public class JwtUtil {//设置盐private static final String KEY1234fdsaf;//方法一用jwt生成token的方法public static String generateToken(UserInfo userInfo) {Calendar calendarCalendar.getInstance();calendar.add(Calendar.SECOND,60);//设置过期时间JWTCreator.Builder builder JWT.create()//payload的内容由一个个的claim组成.withClaim(userInfo, JSON.toJSONString(userInfo)).withExpiresAt(calendar.getTime());String token builder.sign(Algorithm.HMAC256(KEY));//设置签名参数为加密算法算法的参数key(salt盐)return token;}//检验public static DecodedJWT verify(String tokenToBeVerify){DecodedJWT verifynull;try {verify JWT.require(Algorithm.HMAC256(KEY)).build().verify(tokenToBeVerify);}catch ( Exception e){e.printStackTrace();System.out.println(出异常了);}return verify;}//解析为实体对象public static UserInfo parse(DecodedJWT decodedJWT){Claim claim decodedJWT.getClaim(userInfo);if(claim!null){String userStringclaim.asString();UserInfo userInfoJSON.parseObject(userString,UserInfo.class);return userInfo;}return null;} } JJWT的工具类 在这里插入代码片实体类 package comzuxia.bean;public class UserInfo {private Integer id;private String name;private String address;public UserInfo() {}public UserInfo(Integer id, String name, String address) {this.id id;this.name name;this.address address;}public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public String getAddress() {return address;}public void setAddress(String address) {this.address address;} }
http://www.w-s-a.com/news/957194/

相关文章:

  • 太原建网站公司网站设计的流程是怎样的
  • 网站开发交易平台北京网站建设的价格低
  • 捷克注册公司网站搜索引擎广告推广
  • 网站的实用性青岛九二网络科技有限公司
  • 广东备案网站网站反链如何做
  • 做网站的实施过程企业建设H5响应式网站的5大好处6
  • ps制作个人网站首页景安搭建wordpress
  • 常德建设网站制作网站建设推广是什么工作
  • 长春服务好的网站建设百度推广话术全流程
  • 做的网站浏览的越多越挣钱基于jsp的网站开发开题报告
  • 好的做问卷调查的网站好网站调用时间
  • 广州微网站建设平台阿里云国外服务器
  • 如何把做好的网站代码变成网页wordpress shortcode土豆 视频
  • 网站改版竞品分析怎么做中山网站建设文化价格
  • 玉林市网站开发公司电话做网站空间 阿里云
  • 南充做网站略奥网络免费的正能量视频素材网站
  • 电子商务网站开发的基本原则汕头网站制作流程
  • 网站访问量突然增加合肥宣传片制作公司六维时空
  • 建设购物网站流程图怎么找网站
  • 阿里云部署多个网站制作小程序网站源码
  • 博罗东莞网站建设网站免费源代码
  • 网站规划与设计范文桂平网站建设
  • 网站备案号密码wordpress邮箱发送信息错误
  • 模板的网站都有哪些关键词搜索工具爱站网
  • 鲜花网站建设的利息分析企业网站建设方案书
  • 深圳网站平台石家庄做商城网站的公司
  • 微网站营销是什么私人订制网站有哪些
  • 浙江建设工程合同备案网站新手做网站教程
  • 网站优化关键词排名自己怎么做wordpress安装主题失败
  • 成都建设银行招聘网站网站的切换语言都是怎么做的