沭阳网站建设,网站建设类的论文题目,wordpress 数据库 旧Ip,崇明网站怎么做seo云原生学习路线导航页#xff08;持续更新中#xff09; 本文是 通用开发技能系列 文章#xff0c;主要对编程通用技能 Authentication、OAuth、JWT 认证策略 进行学习 1.Basic Authentication认证
每个请求都需要将 用户名密码 进行base64编码后#xff0c;放在请求头的A…云原生学习路线导航页持续更新中 本文是 通用开发技能系列 文章主要对编程通用技能 Authentication、OAuth、JWT 认证策略 进行学习 1.Basic Authentication认证
每个请求都需要将 用户名密码 进行base64编码后放在请求头的Authorization中携带到服务端实现HTTP基本认证HTTP明码传输不安全。一般会用HTTPS传输HTTPS 在 HTTP 基础上面添加了 SSL 安全证书。但如果有人伪造CA证书也可能造成不安全用户名和密码直接放在请求里太不安全了
2.OAuth认证 OAuthOpen Authorization是一个用于授权的开放网络标准允许用户授权第三方应用去访问他们存储在另外的服务提供者上的信息而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。 目前主流的 第三方应用登陆都是使用OAuth标准做的 OAuth标准目前大多使用2.0版本 OAuth2.0授权模式授权码模式和密码模式比较常用 授权码模式authorization code简化模式implicit密码模式resource owner password credentials客户端模式client credentials 更多知识学习博客 OAuth2.0协议流程与授权模式、协议流程http基本认证Authentication OAuth JWT
3.JWT认证
3.1.JWT是什么
JSON Web Token (JWT) 是一个开放标准(RFC 7519)它定义了一种紧凑的、自包含的方式用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任因为它是数字签名的。本质上来说jwt 就是规定了一种token的格式按照 jwt 标准生成的 token包含3部分header、playload、signature每一部分都有自己的功能因此这种token自身就携带了多种特性。
3.2.JWT的3个组成部分
JWT包含3部分 header 头部公开的表示这是jwt的数据。这部分会使用base64url编码会把编码成base64后的数据中的 “、、/” 替换掉这样就可以把jwt生成的token拼接在 请求的url 参数上用于浏览器禁止cookie时使用 playload 有效载荷可以携带一些数据但是不要放私密数据。这部分都是base64编码可以解密相当于明文 signature 验证签名是用来验证发送者的JWT同时也能确保客户端传来的JWT没有被篡改signature 如何鉴别客户端带过来的Token是正确的 signature 是 服务端在生成token时使用 密钥secret对headerplayload进行加密得到的验证签名。如果 下一次请求带来的token拿着headerplayload再次进行密钥加密得到的signature不同说明 数据被别人篡改了。如果加密后值相等说明没有篡改。 因此JWT标准生成的Token实际上并不是安全的内部都使用base64编码也相当于明文但是有 signature 判断数据是否被修改过
3.3.JWT的优缺点
JWT优点 json的通用性所以JWT是可以进行跨语言支持的。很多语言都可以使用 json 传输有了payload部分所以JWT可以在自身存储一些其他业务逻辑所必要的非敏感信息。便于传输jwt的构成非常简单字节占用很小不需要在服务端保存会话信息, 所以它易于应用的扩展不用考虑服务器之间的同步问题 JWT缺点 不应该在jwt的payload部分存放敏感信息因为该部分是客户端可解密的部分。一定得保护好服务端的secret私钥该私钥非常重要。
3.4.使用 JWT Redis 验证用户信息的过程
在用户登陆成功时服务端使用 JWT 的密钥为该用户生成一个token。把userId存入载荷中将token返回给前端。同时我们会在redis中维护一个Hash表键为token值值为user的从数据库中查到的详细信息。下次用户再访问其他资源的时候将token以 cookie、请求头的Authorization字段 或 url参数 的 方式一起发给服务端。服务端中我们会在网关Gateway验证用户的登录状态。 从request中取出token使用 jwt 密钥尝试解密如果发现 token 的 headerplayload 再次加密后得到的 signature 与 token 中的 signature不再一样说明数据被篡改了就会拒绝服务如果验证通过就会从载荷中取出我们事先放入的userId将userId存到请求中再把该请求放行。后续如果需要使用用户的详细信息直接从请求头中获取userId就可以到redis中查到详细信息。