使⽤session机制有助于防⽌越权操作的产⽣_⽤户访问鉴权机
制总结
1、基于 session 的鉴权机制
传统的访问鉴权机制,⽤户登录完成后,⽤户信息存放于服务端的 session 中,客户端 cookie 中存储 session id,每次请求会带上cookie,从⽽服务端可以通过 session id 获取服务端 session 的⽤户信息,从⽽进⾏验证。
这个模式问题在于服务器是集或者跨域的服务导向架构,就需要 session 数据共享,每台服务器都要能够读取 session。
解决⽅式有集中话管理 session 数据,如持久话 session 数据或者 redis 缓存 session 数据。各服务都从持久话服务或 redis 缓存中获取session。
当然你也可以通过将 session 数据加密然后都存储在 cookie 中(客户端),每次请求过来时,解密这个请求带过来的 cookie 数据,获取到具体的 session 数据,这样可以解决服务集 session ⽆法
共享的问题,但⽆法解决跨域的问题。flask session 默认就是采⽤这种⽅式,session 信息加密存储在客户端 cookie 中。session如何设置和读取
session 这种机制不完全适⽤于使⽤ api 调⽤的应⽤的 api 服务鉴权。
2、基于 token 的鉴权机制
token 机制,本质即是将原先 cookie 存放 session id,服务端根据每次请求获取的 cookie 中 session id,到服务端中存储的对应session 信息的⽅式,改为 http 请求需要⼿动传输 token (正确登录后给予的令牌),服务端根据 token 获取⽤户的信息,完成鉴权。
这种⽅式适⽤⼀切应⽤,且通过集中话管理 token 与⽤户关联数据,可以很好解决跨域及⽤户数据集⽆法共享的问题,当然你可以将⽤户数据加密成 token 字符串,这样相当于⽤户数据就存放在客户端就不需要服务端集中话管理 token 与⽤户关联数据了。这也就引伸到下⾯的 JWT 了。
3、json web token
JWT 是⼀种开放标准,定义了⼀种数据格式,以及这个数据格式的产⽣⽅式,可以借助该数据⽅式在各服务间安全地传输信息。
JWT 对象数据结构
HEADER、PAYLOAD 存储的都是 JSON 对象,这⾥已使⽤ Base64URL 加密成了⼀串字符。SIGNATURE 是使⽤ HEADER 中指明的算法将 HEADER.PAYLOAD 加密成的⼀串字符,⽤于防数据篡改。
什么时候使⽤ JWT ?
授权:这是使⽤ JWT 的最常见⽅案。⼀旦⽤户登录,每个后续请求将包括JWT,从⽽允许⽤户访问该令牌允许的路由,服务和资源。单⼀授权
登录是当今⼴泛使⽤JWT的⼀项功能,因为它的开销很⼩并且可以在不同的域中轻松使⽤。
信息交换:JSON Web 令牌是在各⽅之间安全地传输信息的好⽅法。因为可以对JWT进⾏签名(例如,使⽤公钥/私钥对),所以您可以信息交换
确定发件⼈是他们所说的⼈。此外,由于签名是使⽤标头和有效负载计算的,因此您还可以验证内容是否遭到篡改。(邮件验证、短信验证)
特点
1、token 中可以存放⼀些有⽤信息,因⽽有效使⽤可以减少服务器查询数据库的次数。
2、token 默认是不加密的(PAYLOAD 存放数据只经过 Base64URL 加密可以很容易解密回来),因⽽不能在 token 中存放秘密信息。获取 token 就可以获取该令牌的所有权限(token 包含认证信息),为了防⽌泄露造成的影响,token 的有效期应该设置较短。对于重要权限需要⽤户⼆次认证。
3、为防⽌盗⽤,建议传输使⽤ https。
4、OAuth 2.0
什么是 OAuth ?
OAuth(开放授权)是⼀个开放标准协议,允许⽤户授权第三⽅移动应⽤访问他们存储在另外的服务提供者上的信息,⽽不需要将⽤户名和密码提供给第三⽅移动应⽤或分享他们数据的所有内容。
OAuth 流程包含⾓⾊
⽤户:有权访问授权服务,获取属于⾃⼰的资源
应⽤:第三⽅应⽤,需要访问授权服务获取⽤户的资源,但本⾝不具有访问授权服务中资源的权限
授权服务:存储⽤户资源的服务
基于授权登录理解 OAuth 2.0 ?
1. 第三⽅发起授权登录请求,⽤户允许授权第三⽅应⽤后,会拉起应⽤或重定向到第三⽅⽹站,并且带上授权临时票据code 参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进⾏接⼝调⽤,获取⽤户基本数据资源或帮助⽤户实现基本操作。
实例:京东登录授权访问链接
1、第三⽅发起授权登录请求
appid,⽤户允许授权的第三⽅应⽤;redirect_url, 重定向的第三⽅⽹站链接,⼀般是⼀个⾃动提交表单页⾯。
2、授权操作完成,回跳⾄指定第三⽅⽹站链接即 redirect_url 地址
这是⼀个⾃动表单提交页⾯;通过 code、appid、secret 等通过 api 请求获取 access token;state 是应⽤⽅提供的⼀个字段,原样返回给第三⽅应⽤,这个参数的作⽤是防⽌ csrf(跨站请求伪造攻击),也可在服务中将应⽤访问的历史信息与该关键字对应,这样登录完成后就可以准确回跳⽤户未登录前的具体访问地址。
3、通过 access token 获取基本数据资源
参考
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论