热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

鉴权的4种基本方法

一、基于服务器常出现的问题Seesions:每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开
一、基于服务器常出现的问题

Seesions: 每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加。
可扩展性: 由于sessions存放在服务器内存中,伴随而来的是可扩展性问题。当我们想要增加服务器来解决负载问题时,session里的关键性信息会限制我们的扩展。
CORS(跨域资源共享): 当我们扩展应用程序,让数据能够从不同设备上访问时,跨域资源的共享会是一个让人头疼的问题。在使用Ajax抓取另一个域的资源时(移动端访问我们的API服务器),可能会出现禁止请求的情况。
CSRF(跨站请求伪造): 用户在访问银行网站时,他们很容易受到跨站请求伪造的攻击,并且能够被利用其访问其他的网站。


二、常用鉴权方式

  • HTTPBasicAuthentication(HTTP基本认证);
  • session-COOKIE;
  • Token验证(包括JWT,SSO);
  • OAuth(开放授权).


2.1 HTTPBasicAuthentication(HTTP基本认证)

浏览器会弹出一个登录验证的对话框

1.浏览器第一次向服务器发送http请求,服务器响应回401 Unauthozied状态码,在ResponseHeader”WWW-Authenticate”添加信息;
在这里插入图片描述


2.浏览器接收到401Unauthozied后,弹出登录验证的对话框获取用户输入的信息,并使用BASE64编码,放在ResponseHeader的Authorization中发送给服务器;
在这里插入图片描述


3.服务器将Authorizationheader中的信息取出,进行验证,如果验证通过,将根据请求,发送资源给客户端。


2.2 session-COOKIE

利用服务器的session和浏览器的COOKIE来实现前后端认证的,在服务器创建的session集合,将同一个客户端的请求都维护在各自的session中,每当服务器接收到浏览器的COOKIE请求时,会在session集合中查询对应的s_id,如果有就确认身份成功。
在这里插入图片描述

缺点

  • 服务器内存消耗大:用户每做一次应用认证,应用就会在服务端做一次记录,以方便用户下次请求时使用,随着认证用
  • 户的增加,服务器的消耗就会越大;
  • 易受到CSRF攻击:基于COOKIE的一种跨站伪造攻击,基于COOKIE来进行识别用户的话,用户本身就携带了值,COOKIE被截获,用户就很容易被伪造;
  • 扩展不好:当增加为多台服务器时,会涉及到session共享的问题,因此不利于服务器的扩展。


2.3 Token认证(常用)

Token验证也叫令牌,是一种无状态身份验证方式,不用将用户信息存在服务器或Session中去除了服务器内耗问题;当用户第一次登录时,服务器生成一个token并返回客户端,除用户端将保存的token失效或者删除之外,在接下来的请求时,只要带着这个令牌请求数据即可。
在这里插入图片描述


实现步骤:
1.用户通过用户名和密码发送请求;
2.程序验证;
3.程序返回一个签名的token 给客户端;
4.客户端储存token,并且每次请求都会附带它;
5.服务端验证token并返回数据。


优点
1.无状态、可扩展
在客户端存储的token是无状态的,并且能够被扩展。基于这种无状态和不存储Session信息,负载均衡服务器能够将用户的请求传递到任何一台服务器上,因为服务器与用户信息没有关联。当用户量大时,可能会造成一些拥堵。使用token完美解决了此问题。

2.安全性
能够防止CSRF(跨站请求伪造)攻击。Token是有时效的,一段时间之后用户需要重新验证。无需等到token自动失效,token有撤回的操作,通过token revocataion可以使一个特定的token或是一组有相同认证的token无效。

3.可扩展性
使用Tokens能够与其它应用共享权限。例如,能将一个博客帐号和自己的QQ号关联起来。当通过一个第三方平台登录QQ时,我们可以将一个博客发到QQ平台中。
使用token,可以给第三方应用程序提供自定义的权限限制。当用户想让一个第三方应用程序访问它们的数据时,我们可以通过建立自己的API,给出具有特殊权限的tokens。

4.多平台与跨域
解决CORS(跨域资源共享)问题。当应用和服务不断扩大,需要通过多种不同平台或其他应用来接入我们的服务时。可从CDN提供服务。在为我们的应用程序做 Access-Control-Allow-Origin: * 的配置之后,就可以消除CORS带来的问题。只要用户有一个通过了验证的token,数据和资源就能够在任何域上被请求到。

缺点:
占带宽: 正常情况下token要比session_id更大,需要消耗更多流量,挤占更多带宽.(不过几乎可以忽略);
性能问题: 相比于session-COOKIE来说,token需要服务端花费更多的时间和性能来对token进行解密验证.其实Token相比于session-COOKIE来说就是一个"时间换空间"的方案。


2.4 OAuth(开放授权)(流行)

OAuth 就是一种授权机制。用来授权第三方应用,获取用户数据。通过数据的所有者授权第三方应用进入系统,系统从而产生一个临时的令牌,代替密码,授权第三方应用使用权限。
优点
可控姓: 保证了令牌既可以让第三方应用获得权限,同时又随时可控,不会危及系统安全;
方便性: 只要知道了令牌,就能进入系统;
重要性: 系统一般不会再次确认身份,所以令牌必须保密,泄漏令牌与泄漏密码的后果是一样的,这也是为什么令牌的有效期,一般都设置得很短的原因。


三、鉴权方式的区别

3.1 Token与session的区别

登录状态: 使用Token,服务端不需要保存状态。里面本身就保存着用户的登陆状态,Token不需要借助COOKIE的;
时效性: session-COOKIE的sessionid是在登陆的时候生成的而且在登出时一直不变的,在一定程度上安全就会低,而 token是可以在一段时间内动态改变的;
可扩展性: 服务端并不保存token 信息,所以token具有更好的扩展性。


3.2 令牌(token)与密码-OAuth(password)

时效性: 令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化;
可控性: 令牌可以被数据所有者撤销,会立即失效,密码一般不允许被撤销;
权限范围: 令牌有权限范围(scope),对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限。


推荐阅读
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了NetCore WebAPI开发的探索过程,包括新建项目、运行接口获取数据、跨平台部署等。同时还提供了客户端访问代码示例,包括Post函数、服务器post地址、api参数等。详细讲解了部署模式选择、框架依赖和独立部署的区别,以及在Windows和Linux平台上的部署方法。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • Python15行代码实现免费发送手机短信,推送消息「建议收藏」
    Python15行代码实现免费发 ... [详细]
  • asp中如何嵌入python的简单介绍
    本文目录一览:1、如何在IIS中执行Python脚本 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
author-avatar
没有那么一个人_382
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有