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

自己做的网站发到网上墟沟企业建站价格表

自己做的网站发到网上,墟沟企业建站价格表,网址域名解析,海报设计说明万能模板作者#xff1a;lion1ouhttps://lion1ou.win/2017/01/18/在前后端分离开发时为什么需要用户认证呢#xff1f;原因是由于HTTP协定是不储存状态的(stateless)#xff0c;这意味着当我们透过帐号密码验证一个使用者时#xff0c;当下一个request请求时它就把刚刚的资料忘了。…作者lion1ouhttps://lion1ou.win/2017/01/18/在前后端分离开发时为什么需要用户认证呢原因是由于HTTP协定是不储存状态的(stateless)这意味着当我们透过帐号密码验证一个使用者时当下一个request请求时它就把刚刚的资料忘了。于是我们的程序就不知道谁是谁就要再验证一次。所以为了保证系统安全我们就需要验证用户否处于登录状态。传统方式前后端分离通过Restful API进行数据交互时如何验证用户的登录信息及权限。在原来的项目中使用的是最传统也是最简单的方式前端登录后端根据用户信息生成一个token并保存这个 token 和对应的用户id到数据库或Session中接着把 token 传给用户存入浏览器 cookie之后浏览器请求带上这个cookie后端根据这个cookie值来查询用户验证是否过期。但这样做问题就很多如果我们的页面出现了 XSS 漏洞由于 cookie 可以被 JavaScript 读取XSS 漏洞会导致用户 token 泄露而作为后端识别用户的标识cookie 的泄露意味着用户信息不再安全。尽管我们通过转义输出内容使用 CDN 等可以尽量避免 XSS 注入但谁也不能保证在大型的项目中不会出现这个问题。在设置 cookie 的时候其实你还可以设置 httpOnly 以及 secure 项。设置 httpOnly 后 cookie 将不能被 JS 读取浏览器会自动的把它加在请求的 header 当中设置 secure 的话cookie 就只允许通过 HTTPS 传输。secure 选项可以过滤掉一些使用 HTTP 协议的 XSS 注入但并不能完全阻止。httpOnly 选项使得 JS 不能读取到 cookie那么 XSS 注入的问题也基本不用担心了。但设置 httpOnly 就带来了另一个问题就是很容易的被 XSRF即跨站请求伪造。当你浏览器开着这个页面的时候另一个页面可以很容易的跨站请求这个页面的内容。因为 cookie 默认被发了出去。另外如果将验证信息保存在数据库中后端每次都需要根据token查出用户id这就增加了数据库的查询和存储开销。若把验证信息保存在session中又加大了服务器端的存储压力。那我们可不可以不要服务器去查询呢如果我们生成token遵循一定的规律比如我们使用对称加密算法来加密用户id形成token那么服务端以后其实只要解密该token就可以知道用户的id是什么了。不过呢我只是举个例子而已要是真这么做只要你的对称加密算法泄露了其他人可以通过这种加密方式进行伪造token那么所有用户信息都不再安全了。恩那用非对称加密算法来做呢其实现在有个规范就是这样做的就是我们接下来要介绍的 JWT。Json Web Token(JWT)JWT 是一个开放标准(RFC 7519)它定义了一种用于简洁自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行签名。它具备两个特点1.简洁(Compact)可以通过URL, POST 参数或者在 HTTP header 发送因为数据量小传输速度快2.自包含(Self-contained)负载中包含了所有用户所需要的信息避免了多次查询数据库JWT 组成Header 头部头部包含了两部分token 类型和采用的加密算法{  alg: HS256,  typ: JWT}它会使用 Base64 编码组成 JWT 结构的第一部分,如果你使用Node.js可以用Node.js的包base64url来得到这个字符串。Base64是一种编码也就是说它是可以被翻译回原来的样子来的。它并不是一种加密过程。Payload 负载这部分就是我们存放信息的地方了你可以把用户 ID 等信息放在这里JWT 规范里面对这部分有进行了比较详细的介绍常用的由 iss(签发者)exp(过期时间)sub(面向的用户)aud(接收方)iat(签发时间)。{    iss: lion1ou JWT,    iat: 1441593502,    exp: 1441594722,    aud: www.example.com,    sub: lion1ou163.com}同样的它会使用 Base64 编码组成 JWT 结构的第二部分Signature 签名前面两部分都是使用 Base64 进行编码的即前端可以解开知道里面的信息。Signature 需要使用编码后的 header 和 payload 以及我们提供的一个密钥然后使用 header 中指定的签名算法(HS256)进行签名。签名的作用是保证 JWT 没有被篡改过。三个部分通过.连接在一起就是我们的 JWT 了它可能长这个样子长度貌似和你的加密算法和私钥有关系。eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU3ZmVmMTY0ZTU0YWY2NGZmYzUzZGJkNSIsInhzcmYiOiI0ZWE1YzUwOGE2NTY2ZTc2MjQwNTQzZjhmZWIwNmZkNDU3Nzc3YmUzOTU0OWM0MDE2NDM2YWZkYTY1ZDIzMzBlIiwiaWF0IjoxNDc2NDI3OTMzfQ.PA3QjeyZSUh7H0GfE0vJaKW4LjKJuC3dVLQiY4hii8s其实到这一步可能就有人会想了HTTP 请求总会带上 token这样这个 token 传来传去占用不必要的带宽啊。如果你这么想了那你可以去了解下 HTTP2HTTP2 对头部进行了压缩相信也解决了这个问题。签名的目的最后一步签名的过程实际上是对头部以及负载内容进行签名防止内容被窜改。如果有人对头部以及负载的内容解码之后进行修改再进行编码最后加上之前的签名组合形成新的JWT的话那么服务器端会判断出新的头部和负载形成的签名和JWT附带上的签名是不一样的。如果要对新的头部和负载进行签名在不知道服务器加密时用的密钥的话得出来的签名也是不一样的。信息暴露在这里大家一定会问一个问题Base64是一种编码是可逆的那么我的信息不就被暴露了吗是的。所以在JWT中不应该在负载里面加入任何敏感的数据。在上面的例子中我们传输的是用户的User ID。这个值实际上不是什么敏感内容一般情况下被知道也是安全的。但是像密码这样的内容就不能被放在JWT中了。如果将用户的密码放在了JWT中那么怀有恶意的第三方通过Base64解码就能很快地知道你的密码了。因此JWT适合用于向Web应用传递一些非敏感信息。JWT还经常用于设计用户认证和授权系统甚至实现Web应用的单点登录。单点登录图解JWT如何用于单点登录JWT 使用首先前端通过Web表单将自己的用户名和密码发送到后端的接口。这一过程一般是一个HTTP POST请求。建议的方式是通过SSL加密的传输(https协议)从而避免敏感信息被嗅探。后端核对用户名和密码成功后将用户的id等其他信息作为JWT Payload(负载)将其与头部分别进行Base64编码拼接后签名形成一个JWT。形成的JWT就是一个形同lll.zzz.xxx的字符串。后端将JWT字符串作为登录成功的返回结果返回给前端。前端可以将返回的结果保存在localStorage或sessionStorage上退出登录时前端删除保存的JWT即可。前端在每次请求时将JWT放入HTTP Header中的Authorization位。(解决XSS和XSRF问题)后端检查是否存在如存在验证JWT的有效性。例如检查签名是否正确检查Token是否过期检查Token的接收方是否是自己(可选)。验证通过后后端使用JWT中包含的用户信息进行其他逻辑操作返回相应结果。和Session方式存储id的差异Session方式存储用户id的最大弊病在于Session是存储在服务器端的所以需要占用大量服务器内存对于较大型应用而言可能还要保存许多的状态。一般而言大型应用还需要借助一些KV数据库和一系列缓存机制来实现Session的存储。而JWT方式将用户状态分散到了客户端中可以明显减轻服务端的内存压力。除了用户id之外还可以存储其他的和用户相关的信息例如该用户是否是管理员、用户所在的分组等。虽说JWT方式让服务器有一些计算压力(例如加密、编码和解码)但是这些压力相比磁盘存储而言可能就不算什么了。具体是否采用需要在不同场景下用数据说话。单点登录Session方式来存储用户id一开始用户的Session只会存储在一台服务器上。对于有多个子域名的站点每个子域名至少会对应一台不同的服务器例如www.taobao.comnv.taobao.comnz.taobao.comlogin.taobao.com。所以如果要实现在login.taobao.com登录后在其他的子域名下依然可以取到Session这要求我们在多台服务器上同步Session。使用JWT的方式则没有这个问题的存在因为用户的状态已经被传送到了客户端。总结JWT的主要作用在于(一)可附带用户信息后端直接通过JWT获取相关信息。(二)使用本地保存通过HTTP Header中的Authorization位提交验证。但其实关于JWT存放到哪里一直有很多讨论有人说存放到本地存储有人说存 cookie。个人偏向于放在本地存储如果你有什么意见和看法欢迎提出。参考https://segmentfault.com/a/1190000005783306http://blog.rainy.im/2015/06/10/react-jwt-pretty-good-practice/https://ruiming.me/archives/41
http://www.zqtcl.cn/news/148256/

相关文章:

  • 山西成宁做的网站义乌网站建设优化排名
  • 东莞网站建设公司辉煌大厦阿里云服务器官方网站
  • 域名注册网站制作自己建网站需要钱吗
  • 东莞市房管局官方网站域名查询ip网站
  • 织梦模板添加网站地图温州做网站掌熊号
  • 怎样凡科建设网站建立网站的步骤
  • 模板类网站建设中国都有哪些网站
  • 深圳百度推广网站建设深圳电器网站建设
  • 响应式网站有什么区别官方app
  • 手机网站建设哪里好网站架构设计师待遇怎么样
  • 静态网站设计wordpress网页视频播放器
  • 打电话做网站的话术网站安全维护方案
  • 变更备案网站可以访问吗google浏览器下载安装
  • 网站空间更换网站开发的服务器是什么
  • 网站 网页玉溪建设网站
  • 江西宜春市城市建设档案馆网站朋友圈广告30元1000次
  • 响应式网站 分辨率惊艳的网站
  • 苏州网站公司排名前十最好看的视频免费下载
  • 快速设计一个网站wordpress4.9.6
  • 网站建立教学深圳宝安网站建设公司推荐
  • 深圳企业网站建设制作公司叶县红色家园网站建设
  • 网站制作报价被哪些因素影响建设银行官方网站首页个人登录
  • 免费网站怎么建谁能给个网站谢谢
  • 吴忠网站建设家里面的服务器可以做网站吗
  • 这是我自己做的网站做网站前台要学什么课程
  • 程序网站开发建设隔离变压器移动网站
  • 网站设置不发送消息怎么设置回来用typecho做的网站
  • 网站机房建设嵌入式培训机构哪家好
  • 购物网站页面设计图片网站 签约
  • 上海网站改版方案网站邮件设置