什么是网站鉴权,目的是什么?

一般来说,一个网站不可能只有一种操作权限。举个例子,可能存在未登录的操作权限,登录的操作权限,以及管理

员的操作权限等。网站鉴权的目的就是用户在进行操作前,对用户的身份进行识别并判断其是否具有该操作权限的过

程。

网站鉴权的几种方式

这里我们将问题简单化,即操作权限只区分用户是否进行了登录。

Session方式实现

(1)Session实现鉴权

1>用户首先进行登录,如登录成功的话,后台会生成一个唯一的sessionId,并在后台存储对应的用户信息

(redis,数据库等等),并将sessionId写到Cookie。

2>下次该浏览器访问时,会首先判断Cookie,进而确定该用户是否进行了登录操作。

(2)Session一致性问题

即需要将在服务器存储的用户信息放在一块儿(同一个redis,mysql等),否则可能出现在一台机器上登录,

并且在该机器上保存了数据,但下一次请求访问到另一个服务器时,需要重新进行登录的情况。

JWT以及具体实现

(1)JWT鉴权的简单流程

JWT分为三部分:Header(包含加密方式等),Payload(包含用户必要信息,以及过期时间等),

Signature(由前两部分生成)。

1>用户登录成功后,后台根据用户信息加上一个用户唯一的密钥值,生成一串字符串,即Token串,将其设置

在Cookie中;

2>用户下次带Token访问,系统会先根据前两部分以及密钥值,对Token进行有效性以及正确性的验证,如果

验证通过的话,再执行下一步操作...

(2)关于鉴权时机的思考

下面提供两种方式,大家可以根据具体的网站需求进行选择:

1>将接口分为需要进行鉴权的接口(auth),不需要进行鉴权的接口(api),然后通过过滤器对auth接口

进行统一的处理,即登录进行访问,未登录跳回登录页等等逻辑。

2>上面做法存在一个问题,就是当接口中出现无法界定的接口,即登录未登录都可以进行访问。那么,按照上

面的方法就只能对接口进行拆分,分成api和auth接口。

所以,另一种方式就是索性不使用过滤器进行处理,当需要进行登录才能访问,或无法界定的接口的时

候,对token进行验证以及获取,再接着进行下面的逻辑处理。

(3)关于Token刷新的问题

一般Token的有效时间设置为1-2个小时,那么,如果过期之后,就需要重新登录获取Token。为了避免这种

情况,我们可以为Token设置一个刷新有效时间,只要Token在这个刷新有效时间内,使用旧的Token进行访

问,就会给它返回一个新的Token。这样,问题就可以解决。

oauth鉴权,了解一下(应用:第三方登录)

oauth简单来说,就是为了解决一个应用(客户端)中为了获取另一个应用(服务提供商)资源,而不需要用户向

客户端提供服务提供商账号密码信息的这样一个问题。客户端与服务提供商之间,有一个应用授权层,客户端携带

Token通过授权层获取服务提供商的资源。

第三方登录就采用的是oauth2进行授权的,这里有通过Go语言实现QQ和Github第三方登录的代码

总结

我们这里只是简单的探讨了下关于鉴权的几种方式,在实际的开发中,由于安全性,以及网站的复杂性,可能会存

在多种不同的用户权限等等,那么,就可能需要对这些方式进行一定的设计和修改。

原文链接:https://blog.csdn.net/leeezm/article/details/80464847

一、概述

登陆和认证是什么?都是在鉴别用户的身份。如何鉴定识别出这是哪个用户?或者说,有什么方式只有用户自己知道(够安全),又能说出这是他自己?于是就有了"用户名+密码"、"用户名+手机号" 的方式出现。下面主要分析 “用户名+密码”的登陆鉴权方式:

出于安全考虑,我们不可能在所有的请求里都使用“用户名+密码”。

"用户名+密码"不能存储在任何地方,最安全的方式就是存放在用户自己的脑子里,也就是说如果要使用 “用户名+密码” 就得让用户自己提供。

那么我们如何做到可以不用提供用户名和密码呢?我们在用户登录的时候,根据用户的身份信息去生成一种能标记用户的 token。

有了认证信息 token 以后,新的问题就是如何保证这个 token 是安全的呢?如果其他人拿到了这个 token 就能伪造用户身份了。解决方案就是鉴定这个 token 是不是用户本人在使用,一般我们通过以下方式,如果我们能保证下面的两种验证信息是一直都没变或者在可接受的范围内,我们就能认为这个用户一直在使用我们下发的 token。

位置信息(ip、经纬度)

设备信息

现在我们已经做到了 token + (位置、设备信息)来鉴定用户的身份。如果我们每次请求都要鉴定这些信息来确认用户身份,势必影响我们服务的性能。那么如何减少这样的判定呢?

服务端随机或者定时选定一次请求鉴定

客户端定时请求一次鉴定

第一种方式不建议,服务器维护每个用户定时复杂,随机可能会有大量用户同时鉴定的性能问题。那么就是第二种了,客户端定时请求一次鉴定,服务端需要强制客户端定时请求一次鉴定,而这个定时时间就是一个安全因素,如果在期间 token 泄露就会造成用户信息安全问题,时间不能太长,也不能太短,参考微信的是 7200s 就是 2 小时。

那么如何强制客户端每隔一段时间做一次验证呢?很简单,我们给 token 设个有效时间,到失效时间客户端就必须请求一次新的 token,于是就有了 refresh token。

二、鉴权方式

用户登录后,每次请求服务时客户端请求都要包含鉴权信息,服务端根据鉴权信息查询用户信息和其合法性。目前鉴权信息可以有如下方式:

1. 集中式 session 方式

在登陆完成后,服务端将返回作为认证鉴权的随机不重复 token,客户端每次请求带上这个 token(一般放在请求的 header 里面)。服务端通过 token 查询到 token 对应的用户信息。

2. 令牌方式

登陆完成后,服务端根据用户信息和其他安全因素加密生成一个安全令牌(也就是 JWTS,JSON Web Tokens),该令牌中包含了用户的身份信息,在认证鉴权时只需验证令牌的合法性即可,解密即可取到用户信息。

3. 比较

鉴权方式优点不足

集中式 session 方式

1. 服务端维护用户状态,可以管理用户状态,没有失效和用户信息一致问题;

2. 安全性相对较高

1. 服务端维护 Session 状态,根据 Token 获取用户信息需要极高的性能要求

令牌方式

1. 客户端记录用户状态,服务是无状态的,没有集中式的性能问题。

2. 业务解耦,鉴权逻辑相对简单的多,令牌方式在技术实现性能和可靠性上也相对容易些

1. 令牌强制失效或者续签问题,令牌强制失效或更新需要额外工作(比如封禁用户)

2. 当用户信息更新后,令牌里的用户的同步问题

三、鉴权实现方案

1. 集中式 session 方式流程时序

客户端在未登录的状态下请求业务服务,在网关没有获取到认证信息时直接返回 401,告知客户端需要登录。

客户端使用“手机号+密码”、“手机号+验证码”的方式请求登陆服务。

网关发现是登陆服务后,请求登陆认证服务。

登陆认证服务通过手机号码查询用户信息,同时生成 token。

返回网关 token,网关将 token 返回给客户端。

客户端带着 token 请求网关,网关将 token 传给鉴权服务,鉴权服务通过 token 查询用户信息并返回给网关,网关将用户信息转给业务服务,完成接下来的业务流程。

2. 令牌方式流程时序

客户端在未登录的状态下请求业务服务,在网关没有获取到认证信息时直接返回 401,告知客户端需要登录。

客户端使用“手机号+密码”、“手机号+验证码”的方式请求登陆服务。

网关发现是登陆服务后,请求登陆认证服务,同时生成 token(JWT信息),并将 token 返回给客户端。

客户端带着 token 请求网关,网关根据 token(JWT信息)解密得到用户信息,并将用户信息转给业务服务,完成接下来的业务流程。

四、鉴权技术方案

1. 集中式Session鉴权技术方案

集中式Session鉴权验证用户身份有如下的实现方式:

实现说明优点缺点

RPC调用

网关通过RPC调用鉴权服务,通过token获取用户信息

架构逻辑简单,不需要额外工作

增加响应 RT

Redis 直读

网关直接读取鉴权服务的 Redis,验证并获取用户信息

高性能

需要网关也集成鉴权验证逻辑,并且维护 Redis 的配置

Nginx Lua

在 Nginx 里通过 lua 脚本实现鉴权逻辑

性能最好

1. 在网关之前,对签名无效的请求也需要做鉴权验证。

2. Nginx 改造,lua 开发成本

2. 令牌方式鉴权技术方案

令牌方式鉴权的实现就简单的多, 网关直接解析 JWT 信息获取用户信息,然后带着用户信息去请求业务数据。

mysql ip鉴权_网站登录鉴权的实现相关推荐

  1. 4.从零开始搭建基于SpringCloud的京东整站_用户微服务_后台登录鉴权

    本次目标 实现后台登录鉴权功能. 接口文档 1.后台管理员登录 页面访问地址:http://admin/pages/main/login.html 2.接口描述 js请求地址 http://{ip:p ...

  2. linux系统在pe下查看ip地址,pe下查看原系统ip的方法_网站服务器运行维护

    linux查看php环境是否安装_网站服务器运行维护 linux查看php环境是否安装的方法:1.执行[find / -name php.ini]命令,查看系统是否有php的配置文件:2.执行[net ...

  3. jsp论坛网站模版_网站被降权了?看看这些解决方法,或许有帮助哦

    点击标题下「蓝色微信名」可快速关注 在前面的文章中,笔者已经给大家介绍了网站被降权的因素.那么当遇到降权的问题该怎么办呢?接下来,笔者就结合本身经历过的网站降权来给大家介绍一下补救措施. 1.造成网站 ...

  4. centos7.4 mysql启动,centos7下mysql服务启动失败_网站服务器运行维护,centos7,mysql

    centos7系统启动流程_网站服务器运行维护 centos7系统启动流程:1.POST加电自检:2.选择启动设备以加载MBR:3.加载bootloader:4.Kernel自身初始化:5.init管 ...

  5. 云服务器ip维护,openwrt修改默认ip的方法_网站服务器运行维护,openwrt

    笔记本电脑的鼠标光标不见了怎么办_网站服务器运行维护 笔记本电脑的鼠标光标不见了的解决方法是:1.首先打开[电源选项]:2.然后依次点击[其他电源设置].[选择电源按钮的功能].[更改当前不可用的设置 ...

  6. mysql静态化设计_网站静态化与mysql优化

    一.伪静态 1.正则表达式的回顾 (1)要求取出练习的4个数字 (2)要求取出,形式为:xxx-yyy-xxx的数据 正则中几个概念: 子表达式:简单理解成用小括号括起的部分就是一个子表达式, 捕获: ...

  7. 登录验证应该是进行在客户端还是服务器端_网站登录认证方式

    目前大部分软件系统资源访问都是使用HTTP协议,HTTP是无状态的协议,每次请求默认都是相互独立的.但是大部分情况下我们需要记录请求资源的用户信息,也就是保存会话,从而对资源的访问做限制,这是我们认证 ...

  8. 宝塔面板服务器ip地址修改_网站服务器日常安全防护措施(宝塔面板新手网站教程)...

    针对网站日常安全,我一般维护分为下面这几步,下面这些操作一定要在清楚的明白含义和后果的情况下操作,千万不要随意照抄,有些会影响到功能使用,新手慎重!!! 1.宝塔关闭非必需端口,修改宝塔登录端口 宝塔 ...

  9. 怎么清理mysql的死链接_网站死链如何解决?其实很简单

    关于死链,大家就应该比较熟悉它给网站带来的危害,那么对于它的概念,其实简单来讲,死链是指服务器的地址已经改变了.无法找到当前地址位置,包括协议死链和内容死链两种形式.死链出现的原因有网站服务器设置错误 ...

最新文章

  1. lanmp/lamp/lnmp/lnamp一键安装
  2. nbu 恢复oracle数据库,关于使用nbu重定向恢复oracle数据库rman报错
  3. Python 爬虫面试题 102 道
  4. java dos 菜单栏_学习java之电脑的常用快捷键和DOS窗口下的常用命令
  5. 可视化戒烟对身体的影响!从20分钟到15年
  6. 四边形内接于圆定理_2020中考几何秘籍:初中最全几何定理和解题思路
  7. .NET4进行COM互操作--导出数据到Excel
  8. Eclipse 隐藏已关闭的项目
  9. 【渝粤题库】陕西师范大学210009幼儿园健康教育作业(高起专)
  10. 软件项目管理实用教程(人民邮电出版)第二章课后习题
  11. Tool -- 01 -- xml与map相互转换
  12. (练打字微信小程序)把手机当成小型计算机练习打字
  13. android adb连接多个夜神模拟器,夜神安卓模拟器连接adb的具体操作流程
  14. html编码器是什么意思,编码器是什么意思
  15. 应用程序无法正常启动0xc000007b win7
  16. 1089: 手机短号 (多实例)
  17. Keras构建用于分类任务的Transformer(Vision Transformer/VIT)
  18. 【FPGA知识点】八段共阳极数码管编码表
  19. ​谁是信创担当——《2021中国信创生态市场研究报告》正式发布
  20. Spring Boot配置统一格式Result返回值(一)

热门文章

  1. 微盟宕机的 36 小时,300 万商家停摆 ,竟是远程办公的锅?
  2. iOS小技能:app信息查询(应用内调转到app store进行评论)
  3. c语言中字符型整形实型都能用八进制表示,C语言中字符型、整型、实型都能用八进制表示...
  4. Solr原理?为什么要用Solr?Solr为什么比较快?
  5. lapack安装 matlab,调用 LAPACK 和 BLAS 函数
  6. Axure rp9 3658可用注册码 授权码 激活码 key 亲测可用
  7. 基于一阶微分的锐化滤波器---梯度算子(常用于工业检测,产品缺陷检测)
  8. Flutter的整体架构
  9. 矩阵正定 matlab,判断矩阵是否为对称正定矩阵
  10. Linux服务器改造成路由器的方法