精华内容
下载资源
问答
  • 什么token
    千次阅读
    2021-01-11 23:30:44

    对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不知道为什么要用他?更不知道其原理,今天我就带大家一起分析分析这东西。

    一、我们先解释一下他的含义:

    1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。

    2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

    3、使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

    了解了Token的意义后,我们就更明确的知道为什么要用他了。

    二、如何使用Token?

    这是本文的重点,在这里我就介绍常用的两种方式。

    1、用设备号/设备mac地址作为Token(推荐)

    客户端:客户端在登录的时候获取设备的设备号/mac地址,并将其作为参数传递到服务端。

    服务端:服务端接收到该参数后,便用一个变量来接收同时将其作为Token保存在数据库,并将该Token设置到session中,客户端每次请求的时候都要统一拦截,并将客户端传递的token和服务器端session中的token进行对比,如果相同则放行,不同则拒绝。

    分析:此

    更多相关内容
  • 之后他继续提问,当你登录成功后,去请求购物车时,后台为什么会返回的是你的购物车,而不是别人的?不是匹配用户id吗??我还没领悟到面试官想让我回答的是Token。。。。参考链接:https://juejin.i...

    写这一篇文章的来源是因为某一天的我被面试官提问:让你设计一个登录页面,你会如何设计?

    我当时的脑子只有???

    不就是提交账号、密码给后台就搞定了呢?

    不可能那么简单,我弱弱的想,难道要对密码加密??

    之后他继续提问,当你登录成功后,去请求购物车时,后台为什么会返回的是你的购物车,而不是别人的?

    不是匹配用户id吗??我还没领悟到面试官想让我回答的是Token。。。。

    参考链接:https://juejin.im/post/5a6c60166fb9a01caf37a5e5

    什么是Token?

    token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。

    当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。

    简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。

    为什么要用Token?

    Token 完全由应用管理,所以它可以避开同源策略

    Token 可以避免 CSRF 攻击

    Token 可以是无状态的,可以在多个服务间共享

    基于token机制的身份认证

    使用token机制的身份验证方法,在服务器端不需要存储用户的登录记录。大概的流程:

    客户端使用用户名和密码请求登录。

    服务端收到请求,验证用户名和密码。

    验证成功后,服务端会生成一个token,然后把这个token发送给客户端。

    客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地存储)里。

    客户端每次向服务端发送请求的时候都需要带上服务端发给的token。

    服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。(如果这个 Token 在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。)

    Token需要设置有效期吗?

    对于这个问题,我们不妨先看两个例子。一个例子是登录密码,一般要求定期改变密码,以防止泄漏,所以密码是有有效期的;另一个例子是安全证书。SSL 安全证书都有有效期,目的是为了解决吊销的问题。所以无论是从安全的角度考虑,还是从吊销的角度考虑,Token 都需要设有效期。

    那么有效期多长合适呢?

    只能说,根据系统的安全需要,尽可能的短,但也不能短得离谱——想像一下手机的自动熄屏时间,如果设置为 10 秒钟无操作自动熄屏,再次点亮需要输入密码,会不会疯?

    然后新问题产生了,如果用户在正常操作的过程中,Token 过期失效了,要求用户重新登录……用户体验岂不是很糟糕?

    解决Token失效的问题

    一种方案是在服务器端保存 Token 状态,用户每次操作都会自动刷新(推迟) Token 的过期时间——Session 就是采用这种策略来保持用户登录状态的。然而仍然存在这样一个问题,在前后端分离、单页 App 这些情况下,每秒种可能发起很多次请求,每次都去刷新过期时间会产生非常大的代价。如果 Token 的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率,减少消耗,会把 Token 的过期时保存在缓存或者内存中。

    另一种方案,使用 Refresh Token,它可以避免频繁的读写操作。这种方案中,服务端不需要刷新 Token 的过期时间,一旦 Token 过期,就反馈给前端,前端使用 Refresh Token 申请一个全新 Token 继续使用。这种方案中,服务端只需要在客户端请求更新 Token 的时候对 Refresh Token 的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。当然 Refresh Token 也是有有效期的,但是这个有效期就可以长一点了,比如,以天为单位的时间。

    使用Token和RefreshToken的时序图如下:

    上面的时序图中并未提到 Refresh Token 过期怎么办。不过很显然,Refresh Token 既然已经过期,就该要求用户重新登录了。

    当然还可以把这个机制设计得更复杂一些,比如,Refresh Token 每次使用的时候,都更新它的过期时间,直到与它的创建时间相比,已经超过了非常长的一段时间(比如三个月),这等于是在相当长一段时间内允许 Refresh Token 自动续期。

    到目前为止,Token 都是有状态的,即在服务端需要保存并记录相关属性。那说好的无状态呢,怎么实现?

    无状态Token

    如果我们把所有状态信息都附加在 Token 上,服务器就可以不保存。但是服务端仍然需要认证 Token 有效。不过只要服务端能确认是自己签发的 Token,而且其信息未被改动过,那就可以认为 Token 有效——“签名”可以作此保证。平时常说的签名都存在一方签发,另一方验证的情况,所以要使用非对称加密算法。但是在这里,签发和验证都是同一方,所以对称加密算法就能达到要求,而对称算法比非对称算法要快得多(可达数十倍差距)。更进一步思考,对称加密算法除了加密,还带有还原加密内容的功能,而这一功能在对 Token 签名时并无必要——既然不需要解密,摘要(散列)算法就会更快。可以指定密码的散列算法,自然是 HMAC。

    上面说了这么多,还需要自己去实现吗?不用!JWT 已经定义了详细的规范,而且有各种语言的若干实现。

    不过在使用无状态 Token 的时候在服务端会有一些变化,服务端虽然不保存有效的 Token 了,却需要保存未到期却已注销的 Token。如果一个 Token 未到期就被用户主动注销,那么服务器需要保存这个被注销的 Token,以便下次收到使用这个仍在有效期内的 Token 时判其无效。有没有感到一点沮丧?

    在前端可控的情况下(比如前端和服务端在同一个项目组内),可以协商:前端一但注销成功,就丢掉本地保存(比如保存在内存、LocalStorage 等)的 Token 和 Refresh Token。基于这样的约定,服务器就可以假设收到的 Token 一定是没注销的(因为注销之后前端就不会再使用了)。

    如果前端不可控的情况,仍然可以进行上面的假设,但是这种情况下,需要尽量缩短 Token 的有效期,而且必须在用户主动注销的情况下让 Refresh Token 无效。这个操作存在一定的安全漏洞,因为用户会认为已经注销了,实际上在较短的一段时间内并没有注销。如果应用设计中,这点漏洞并不会造成什么损失,那采用这种策略就是可行的。

    在使用无状态 Token 的时候,有两点需要注意:

    Refresh Token 有效时间较长,所以它应该在服务器端有状态,以增强安全性,确保用户注销时可控

    应该考虑使用二次认证来增强敏感操作的安全性

    到此,关于 Token 的话题似乎差不多了——然而并没有,上面说的只是认证服务和业务服务集成在一起的情况,如果是分

    分离认证服务

    当 Token 无状态之后,单点登录就变得容易了。前端拿到一个有效的 Token,它就可以在任何同一体系的服务上认证通过——只要它们使用同样的密钥和算法来认证 Token 的有效性。就样这样:

    当然,如果 Token 过期了,前端仍然需要去认证服务更新 Token:

    可见,虽然认证和业务分离了,实际即并没产生多大的差异。当然,这是建立在认证服务器信任业务服务器的前提下,因为认证服务器产生 Token 的密钥和业务服务器认证 Token 的密钥和算法相同。换句话说,业务服务器同样可以创建有效的 Token。

    如果业务服务器不能被信任,该怎么办?

    不受信的业务服务器

    遇到不受信的业务服务器时,很容易想到的办法是使用不同的密钥。认证服务器使用密钥1签发,业务服务器使用密钥2验证——这是典型非对称加密签名的应用场景。认证服务器自己使用私钥对 Token 签名,公开公钥。信任这个认证服务器的业务服务器保存公钥,用于验证签名。幸好,JWT 不仅可以使用 HMAC 签名,也可以使用 RSA(一种非对称加密算法)签名。

    不过,当业务服务器已经不受信任的时候,多个业务服务器之间使用相同的 Token 对用户来说是不安全的。因为任何一个服务器拿到 Token 都可以仿冒用户去另一个服务器处理业务……悲剧随时可能发生。

    为了防止这种情况发生,就需要在认证服务器产生 Token 的时候,把使用该 Token 的业务服务器的信息记录在 Token 中,这样当另一个业务服务器拿到这个 Token 的时候,发现它并不是自己应该验证的 Token,就可以直接拒绝。

    现在,认证服务器不信任业务服务器,业务服务器相互也不信任,但前端是信任这些服务器的——如果前端不信任,就不会拿 Token 去请求验证。那么为什么会信任?可能是因为这些是同一家公司或者同一个项目中提供的若干服务构成的服务体系。

    但是,前端信任不代表用户信任。如果 Token 不没有携带用户隐私(比如姓名),那么用户不会关心信任问题。但如果 Token 含有用户隐私的时候,用户得关心信任问题了。这时候认证服务就不得不再啰嗦一些,当用户请求 Token 的时候,问上一句,你真的要授权给某某某业务服务吗?而这个“某某某”,用户怎么知道它是不是真的“某某某”呢?用户当然不知道,甚至认证服务也不知道,因为公钥已经公开了,任何一个业务都可以声明自己是“某某某”。

    为了得到用户的信任,认证服务就不得不帮助用户来鉴别业务服务。所以,认证服器决定不公开公钥,而是要求业务服务先申请注册并通过审核。只有通过审核的业务服务器才能得到认证服务为它创建的,仅供它使用的公钥。如果该业务服务泄漏公钥带来风险,由该业务服务自行承担。现在认证服务可以清楚的告诉用户,“某某某”服务是什么了。如果用户还是不够信任,认证服务甚至可以问,某某某业务服务需要请求 A、B、C 三项个人数据,其中 A 是必须的,不然它不工作,是否允许授权?如果你授权,我就把你授权的几项数据加密放在 Token 中……

    废话了这么多,有没有似曾相识……对了,这类似开放式 API 的认证过程。

    e...看了那么多,我希望下次面试官问我登录页面怎么设计的时候,我可以说一番长篇大论哈哈哈。

    展开全文
  • [ 路丁前言 ]针对新手而言,对Token和Session的应用在所难免仅限于窘境,开发设计全过程中了解有这个东西,但却不清楚为何要他?更不清楚其基本原理,今日我也带大伙儿一起剖析剖析这东西。一、大家先解释一下他的...

    [ 路丁前言 ]针对新手而言,对Token和Session的应用在所难免仅限于窘境,开发设计全过程中了解有这个东西,但却不清楚为何要用他?更不清楚其基本原理,今日我也带大伙儿一起剖析剖析这东西。

    一、大家先解释一下他的含意:

    1、Token的引进:Token是在手机客户端经常向服务器端恳求数据信息,服务器端经常的去数据库登录名和登陆密码并开展比照,分辨登录名和登陆密码恰当是否,并做出相对提醒,在那样的情况下,Token便应时而生。

    2、Token的界定:Token是服务器端转化成的一串字符串数组,以作手机客户端开展恳求的一个动态口令,当第一次登陆后,网络服务器转化成一个Token便将此Token回到给手机客户端,之后手机客户端只需携带这一Token前去恳求数据信息就可以,不用再度携带登录名和登陆密码。

    3、应用Token的目地:Token的目地是以便缓解网络服务器的工作压力,降低经常的数据库查询,使网络服务器更为健硕。

    了解了Token的实际意义后,大家就更确立的了解为何要用他了。

    二、怎么使用Token?

    它是文中的关键,在这儿我也详细介绍常见的二种方法。

    1、用设备号/机器设备mac详细地址做为Token(强烈推荐)

    手机客户端:手机客户端在登陆的情况下获得机器设备的设备号/mac详细地址,并将其做为参数传递到服务器端。

    服务器端:服务器端接受到该主要参数后,便用一个自变量来接受另外将其做为Token储存在数据库查询,并将该Token设定到session中,手机客户端每一次恳求的情况下必须统一阻拦,并将手机客户端传送的token和服务端session中的token开展比照,假如同样则海关放行,不一样则回绝。

    剖析:此时手机客户端和服务端就统一了一个唯一的标志Token,并且确保了每一个机器设备有着了一个唯一的对话。该方式 的缺陷是手机客户端必须带设备号/mac详细地址做为参数传递,并且服务端还必须储存;优势是手机客户端不需再次登陆,要是登陆一次之后一直能够应用,对于请求超时的难题是有网络服务器这里来解决,如何处理?若网络服务器的Token请求超时后,网络服务器只需将手机客户端传送的Token向数据库查询中查寻,另外并取值给自变量Token,这般,Token的请求超时又再次记时。

    2、用session值做为Token

    手机客户端:手机客户端只需带上登录名和登陆密码登录就可以。

    手机客户端:手机客户端接受到登录名和登陆密码后并分辨,假如恰当了就将当地获得sessionID做为Token回到给手机客户端,手机客户端之后只需携带恳求数据信息就可以。

    剖析:这类方法应用的益处是便捷,无需储存数据信息,可是缺陷便是当session到期后,手机客户端务必再次登陆才可以开展浏览数据信息。

    三、应用全过程中出現的难题及其解决方法?

    刚刚大家轻轻松松详细介绍了Token的二种应用方法,可是在应用全过程中大家还出現各种各样难题,Token第一种方式 中大家掩藏了一个在网络不稳定或是高并发恳求时候造成 重复递交数据信息的难题。

    小结:之上是本人对开发设计中应用Token和session的一点小结,若有描述不妥请纠正,我将立即纠正并谢谢,我明白也有越来越多的应用方法,我在这仅仅毛遂自荐,期待大伙儿将您的应用方法明确提出来,我们一起探讨,学习培训,一起发展,另外也为像我一样对这些方面了解欠缺的盆友出示点协助,感谢。

    9dc9275f88c1d3845e42be354da77d77.png

    展开全文
  • 但是它是什么,有什么用,是我在项目中遇到后,才去查的,记录一下我的理解。 token是什么? Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回...

    前言

    我第一次听到token,是在课堂上,老师讲了,但是我啥也没记住,只知道有token这个东西。但是它是什么,有什么用,是我在项目中遇到后,才去查的,记录一下我的理解。

    token是什么?

    Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。

    我自己理解的token是一个身份卡,有权限的作用。

    token产生背景

    HTTP 是一种没有状态的协议,也就是它并不知道是谁是访问应用。这里我们把用户看成是客户端,客户端使用用户名还有密码通过了身份验证,不过下回这个客户端再发送请求时候,还得再验证一下。

    token的使用

    1,前端登陆的时候向服务器发送请求,服务器验证成功,会生成一个token

    2,前端会存储这个token,放在session或cookie中,用于之后的业务请求身份验证

    3,拿着这个token,可以在当前登录的账号下进行请求业务,发送请求时,token会放在请求头里,服务器收到这个业务请求,验证token,成功就允许这个请求获取数据

    4,token可以设置失效期

    展开全文
  • 什么tokentoken是由服务器生成的字符串,用作客户端发出请求的token。当第一个会话启动时,服务器生成一个token并将其返回给客户机。将来,客户只需要使用这个token来请求数据,而不需要重新输入用户名和密码。...
  • 对于初学者来说,可能很难会理解Token,经常会在互联网上看到出售各种渠道的token,那么token到底是什么?其原理又是什么?首先和Token相对应的有一个Session, what?怎么又懵逼了?Session又是什么?当我们理解完Session的...
  • vue token的简单理解和使用

    千次阅读 多人点赞 2020-09-06 16:06:26
    什么token ? 客户端向服务端请求数据,服务端需要查询客户端的用户账号密码进行身份判定,每次账号和密码的对比都会造成服务端的算力浪费,使用token可以减轻服务器的压力,减少频繁的查询数据库。 如何存储token...
  • token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,一次登录后,服务器生成一个token便将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码...
  • vue项目中token的使用

    千次阅读 2020-06-16 19:57:03
    token 在第一次登录时,客户端携带用户名与密码向服务端发送登录请求,此时服务端接收到用户名与密码后与数据库进行比对判断,如果正确,就将本地获取sessionID作为token,然后将这个token返回给客户端。这时客户端...
  • 什么token 以及 token 怎么

    千次阅读 2019-06-24 15:11:24
    Token的引入: Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便...参考:什么是 tokenhttps://w...
  • 前端token什么?怎么进行封装使用

    多人点赞 2022-04-08 15:44:30
    token的使用和封装
  • 刚出来工作,最近别人一直在说token,每次都是一脸蒙蔽,各位大神能否帮忙解答一下。
  • Token什么

    千次阅读 2020-01-16 11:02:12
    对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不知道为什么它?更不知道其原理,今天我就带大家一起分析分析这东西。 一、我们先解释一下他的含义: 1、Token的...
  • springboot—什么token? 什么是session?什么是cookie?token session cookie有什么区别? 文章目录springboot---什么token? 什么是session?什么是cookie?...a、设备号/设备mac地址作为Token(推荐)b
  • 浅谈Token理解运用

    2020-12-19 04:43:53
    今天分享一下Token的理解,首先Token的定义是什么?概念Token被翻译成为('令牌','标记')在计算机中的含义也差不错('计算机身份认证安全令牌'),token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号...
  • 什么是 JWT Token

    千次阅读 2021-09-17 17:10:49
    什么是 JWT TokenJWT 简介认证流程用户认证的流程安全限制客户端附带 JWT Token 的方式Bearer 是什么意思? JWT 简介 JSON Web Token (JWT,RFC 7519 (opens new window)),是为了在网络应用环境间传递声明而执行的一...
  • 任俊利2018-06-0690后it男赞同来自:1、Token合约是什么Token合约的本质,就是包含了一个对账户地址及其余额的映射的智能合约,可能是代表货币的价值,可能是代表持有人的权益。Token被转账的时候,Token合约自动...
  • token能做什么

    2021-05-08 14:15:46
    token token,是一个令牌,就好像你开门时候的钥匙。有的人才能进,没有的人就进不去 1.用户登录后,服务器会通过一定算法,把用户的信息加密成一个字符串,并返回给到前端 2.前端需要将token的字段存到本地,下次...
  • token什么

    万次阅读 多人点赞 2018-05-17 09:30:52
    对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不知道为什么他?更不知道其原理,今天我就带大家一起分析分析这东西。 一、我们先解释一下他的含义: 1、Token的引入...
  • 什么是登录Token

    千次阅读 2020-11-12 16:22:06
    什么是登录Token什么是登录token 什么是登录token token这个词翻译过来就是‘代替物’的意思 Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给...
  • 什么是JWT JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload...
  • ![图片说明]...申请公众号要填写网页的token值,这个token什么意思,我怎么知道自己url的token值,是要自己通过程序获取吗?初次刚学,不是很懂,有明白的吗?
  • 找到 tokenStore.getAccessToken(authentication)后,发现里面这句话,生成了token,我的token是存在redis的,他会先在reids里面找如果有token就拿出来,没有或者失效了,就重新生成一个. OAuth2AccessToken ...
  • 欢迎关注文章系列 ,关注我... 大爷:马都什么? 夏洛:马冬梅。 6 7大爷:什么都没啊? 8 9夏洛:马冬梅啊。 10 11大爷:马什么没? 12 13夏洛:行,大爷你先凉快着吧。 复制代码在了解这三个概念之前我们先...
  • Token

    2021-02-08 20:16:30
    1.Token的演变历史 1.1纯静态时代 很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是...
  • token的作用

    2022-02-27 01:35:08
    token是服务端生成的一串字符串, 充当客户端进行请求的一个令牌, 当第一次登录后, 服务器生成一个token, 将token返回客户端, 客户端存储token, 客户端只需带上token来请求数据即可, 服务端验证token并返回数据. ...
  • 什么Token

    千次阅读 2020-05-14 10:20:24
    1、Json Web Token干什么 简称JWT,在HTTP通信过程中,进行身份认证。 我们知道HTTP通信是无状态的,因此客户端的请求到了服务端处理完之后是无法返回给原来的客户端。因此需要对访问的客户端进行识别,常用的做法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,958
精华内容 11,583
关键字:

token干什么用

友情链接: VB-PPPOE-ET992011-3-12.rar