基于token与基于服务器的身份认证

基于token与基于服务器的身份认证

1、基于服务器的身份认证

我们清楚 http 协议是无状态的,也就是说,如果我们已经认证了一个用户,那么他下一次请求的时候,服务器不知道我是谁,我们就必须要再次认证。

我们与浏览器交互时,比如说登陆成功后,你再去获取其他的数据,服务器能准确的给与响应,怎么做到的呢?

登陆成功后,服务器会为你开辟一块内存区间 (可以理解为 session),用于存放你这次会话的一些内容,比如姓名、性别、年龄等;

存放数据的同时,会生成 session id来标记这块内存区间是属于你的,并且,这个 session id( jsessionid ) 会写入到你的浏览器 cookie 中,

只要你浏览器没关闭,每次向服务器发送请求,服务器就会从你发送过来的 cookie 中去取这个 session id,然后根据这个 session id 到相应的内存中

取出你之前存放的数据,但是,如果退出登录。服务器会清除属于你的内存区域,再登录时,重新生成新的 session

但是,上边这种基于服务器的身份认证是有一些问题的:

  • session 每次用户认证后,服务器都要创建一条记录保存用户数据,通常发生在内存中,随着认证通过的用户越来越多,服务器的在这里的开销就会越来越大…

  • Scalability : 由于Session是在内存中的,这就带来一些扩展性的问题。

  • CORS : 当我们想要扩展我们的应用,让我们的数据被多个移动设备使用时,我们必须考虑跨资源共享问题。当使用AJAX调用从另一个域名下获取资源时,我们可能会遇到禁止请求的问题。

  • CSRF : 用户很容易受到CSRF攻击。

2、基于 Token 的身份认证

基于 token 的身份认证是无状态的,服务器或者 session 中不会存储任何用户信息。

采用 token 这种方式,通常我们是要先去禁用 session 的,设置为 session 为 SessionCreationPolicy.STATELESS

没有会话信息意味着应用程序可以根据需要扩展和添加更多的机器,而不必担心用户登录的位置。 --- 单点登录?

虽然这一实现可能会有所不同,但其主要流程如下:

  1. 用户携带用户名和密码请求访问
  2. 服务器校验用户凭据
  3. 应用提供一个token给客户端
  4. 客户端存储token,并且在随后的每一次请求中都带着它
  5. 服务器校验token并返回数据

注意:

  1. 每一次请求都需要token
  2. Token应该放在请求header中
  3. 我们还需要将服务器设置为接受来自所有域的请求,用Access-Control-Allow-Origin: *
使用 token 的好处?

1、无状态和可扩展性

Tokens存储在客户端。完全无状态,可扩展。我们的负载均衡器可以将用户传递到任意服务器,因为在任何地方都没有状态或会话信息。

2、安全

*Token不是Cookie。(The token, not a cookie.)每次请求的时候Token都会被发送。而且,由于没有Cookie被发送,还有助于防止CSRF攻击。即使在你的实现中将token存储到客户端的Cookie中,这个Cookie也只是一种存储机制,而非身份认证机制。没有基于会话的信息可以操作,因为我们没有会话!

还有一点,token在一段时间以后会过期,这个时候用户需要重新登录。这有助于我们保持安全。还有一个概念叫token撤销,它允许我们根据相同的授权许可使特定的token甚至一组token无效。*

3、总结

前面1、2节,我们了解了基于 token 的身份认证的一些优点,但是目前我们所见的系统仍是基于服务器身份认证的?

首先,这两年 vue、angular 等前端语言的火热,显然前后端分离已成为互联网项目开发的业界标准使用方式;

但是,前后端分离,必然促使开发人员的分离,毕竟,小公司全栈工程师还是少数,所以对于 jsp 等原始人时代,

还是有人在追捧的。

posted @ 2019-04-09 22:03 niceyoo 阅读(...) 评论(...) 编辑 收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414491.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 视频通话

基于腾讯云视频SDK 实现效果 实现步骤: 1、登录腾讯云开发者平台 https://cloud.tencent.com/product/trtc 2、进入 实时音视频 主页。并创建应用 进入实时音视频方法:点击——控制台——>云产品 3、进入开发辅助主页,创建uid 第四…

c++的作业2

本题再次加深了我对于素数与非素数的认识,以及学会了控制每行素数的个数。 本题,让我再一次加深对于是switch的用法,case中只能是常量表达式, break,continue都适用于三种循环结构,即,for&#…

开箱一个docker

开箱一个docker 1、docker 的出现? 1.1、环境切换配置麻烦 通常我们在开发环境写好代码,打个war/jar包,扔到tomcat下,就算是跑起来了;但是扔到生产环境就挂了,what?各种错误。。。 1.2、应用之…

jedis jedispool Redistemplate

jedis jedispool Redistemplate 整理了之前学习 redis 的笔记,强烈建议看最后总结。 在大型系统数据读请求中,基本上90%都可以通过分布式缓存集群来抗下来,而 Redis 又是分布式缓存集群的主要践行者,因此了解 Redis 是必不可少的…

支付宝支付提示 4006 ISV权限不足,建议在开发者中心检查签约是否已经生效

解决方法非常简单: 1、首先登录支付宝商家中心:https://b.alipay.com/index.htm 查看产品中心,对应功能有木有开通,或者签约开通 2、登录支付宝开放平台:https://open.alipay.com/platform/home.htm 查看应用功能列…

android 自定义相机,Camera,相机遮罩层

实现效果: 实现方法:一个自定义view实现demo 一、自定义相机Camera,无API版本限制 (1)。实现接口 implements SurfaceHolder.Callback private SurfaceView mView;private Camera mCamera; private int cameraId 0;/…

RedisTemplate在项目中的应用

RedisTemplate在项目中的应用 如下主要通去年无聊做的 "涂涂影院后台管理系统" 一个 demo,看 RedisTemplate 的使用。 主要用到地方:视频首页轮播图的获取,以及搜索检索界面,如下图所示: 由于是非maven非sp…

Android 蓝牙开发,搜索蓝牙列表,蓝牙连接,蓝牙通讯

申请打开蓝牙 <!-- 蓝牙权限 --> <uses-permission android:name"android.permission.BLUETOOTH" /> <uses-permission android:name"android.permission.BLUETOOTH_ADMIN" />private final int BLUE_REQUEST_CODE 551; public void s…

jeecg uedit 自定义图片上传路径

jeecg uedit 图片上传配置自定义物理路径&#xff0c;简单描述&#xff1a;我们知道 jeecg 中使用的 uedit 默认图片上传路径为 “当前项目\plug-in\ueditor\jsp\uploadx\日期\图片.png”&#xff0c;但是把图片放在项目中显然是很不友好的&#xff0c;所以我们自定义上传路径。…

了解一下Elasticsearch的基本概念

了解一下Elasticsearch的基本概念 一、前文介绍 Elasticsearch&#xff08;简称ES&#xff09;是一个基于Apache Lucene(TM)的开源搜索引擎&#xff0c;无论在开源还是专有领域&#xff0c;Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。注意&#x…

简单的对象定位与登录实例的简单操作

①元素对应的定位方法&#xff1a; ②登录实例&#xff08;暂不考虑验证环节&#xff09; 注意&#xff1a;在实践过程中出现过&#xff0c;密码输入之后又被清空的情况&#xff0c;应该是被处理过&#xff0c;换个别的简单的登录界面试下看看如果没有出现前面所说的情况&#…

百度OCR文字识别API使用心得 com.baidu.ocr.sdk.exception.SDKError[283604]

百度OCR文字识别API使用心得 com.baidu.ocr.sdk.exception.SDKError[283604] 本文转载自好基友upuptop&#xff1a;https://blog.csdn.net/pyfysf/article/details/77455330 效果图&#xff1a; 如下为文章正文&#xff1a; 最近有个小项目使用到了OCR技术&#xff0c;顺便到网…

Android studio ERROR: Software caused connection abort: recv failed 解决方法

使用Android studio打开kotlin项目时报错&#xff1a;ERROR: Software caused connection abort: recv failed 解决方法&#xff1a;修改三个文件即可 1、修改gradle-wrapper.properties 修改为当前Android studio的gradle版本 2、修改项目build.gradle 修改为当前Android st…