im钱包官方网站
数字资产服务平台

im钱包官方网站是全球著名的数字资产交易平台之一,主要面向全球用户提供比特币、莱特币、以太币等数字资产的币币和衍生品交易服务。

tokenpocket官网最新下载|登录token是什么意思

时间:2024-03-12 13:40:38

用户身份验证的令牌——Token - 知乎

用户身份验证的令牌——Token - 知乎首发于人工智能大数据学习交流切换模式写文章登录/注册用户身份验证的令牌——Token企通查北京奥德塔数据科技有限公司Token是什么?所谓的Token,其实就是服务端生成的一串加密字符串、以作客户端进行请求的一个“令牌”。当用户第一次使用账号密码成功进行登录后,服务器便生成一个Token及Token失效时间并将此返回给客户端,若成功登陆,以后客户端只需在有效时间内带上这个Token前来请求数据即可,无需再次带上用户名和密码。图:来源于网络拿实际过程举例,当你下载QQ或微信后第一次用账号和密码成功登录后,Token就为我们免去了每次打开应用都要输入账号跟密码的过程。为什么要使用Token?为什么要使用Token?这个问题其实很好回答——因为它能解决问题!当下用户对产品的使用体验要求在逐渐提高,从产品体验方面来讲,Token带来的体验更容易能让用户接受。那么Token都可以解决哪些问题呢?Token具有随机性、不可预测性、时效性、无状态、跨域等特点。 Token完全由应用管理,所以它可以避开同源策略Token可以避免CSRF攻击Token可以是无状态的,可以在多个服务间共享Token是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回Token给前端。前端可以在每次请求的时候带上Token证明自己的合法地位。如果这个Token在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。当然说到这里大家可能会想到,用服务器的session_id存储到cookies中也能做到,为什么非要用Token呢?网上有许多对比Token和session的文章,在此就不再赘述。其实小编觉得,如果是开发web应用的话,用两者都可以,但如果是开发API接口,前后端分离,最好使用Token,因为session+cookies是基于web的,但针对API接口可能会考虑到移动端,app是没有cookies和session的。Token的生命周期1)用户未登录用户执行注册/登录→一旦基础数据校验成功,后端生成Token,并且Token包含此次注册/登录用户的用户名并通过JsonResponse返回给前端→前端拿到返回的Token后,存入浏览器本地存储2)用户每次访问博客页面从本地存储中拿出Token→JS将Token 放入request的Authorization头,发送http请求向后端索要数据→服务器接到前端请求(当前URL加了loging_check,并且请求方法在methods参数中),进行校验→从requestAuthorization头拿出Token→校验→校验不通过,返回前端异常代码/校验通过,正常执行对应的视图函数→前端一旦接到关于Token的异常码,则删除本地存储中的Token,且将用户转至登录界面。如何设置Token的有效期?其实Token作为一个概念模型,开发者完全可以针对自己开发的应用自定义Token,只要能做到不让不法分子钻系统漏洞即可。那么为Token设置有效期还有必要吗?对于这个问题,大家不妨先看两个例子:例1:登录密码登录密码一般要求定期改变密码,以防止泄漏,所以密码是有有效期的。例2:安全证书SSL安全证书都有有效期,目的是为了解决吊销的问题。所以无论是从安全的角度考虑,还是从吊销的角度考虑,Token都需要设有效期。那么,Token的有效期多长合适呢?一般来说,基于系统安全的需要当然需要尽可能的短,但也不能短得离谱:如果在用户正常操作的过程中,Token过期失效要求重新登录,用户体验岂不是很糟糕?为了解决在操作过程不让用户感到Token失效的问题,有一种方案是在服务器端保存Token状态,用户每次操作都会自动刷新(推迟)Token的过期时间。如此操作会存在一个问题,即在前后端分离、单页App等情况下,每秒可能发起多次请求,如果每次都去刷新过期时间会产生非常大的代价,同样地,如果Token的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率、减少消耗,会把Token的过期时保存在缓存或者内存中。另一种方案是使用RefreshToken,它可以避免频繁的读写操作。这种方案中,服务端无需刷新Token的过期时间,一旦Token过期,就反馈给前端,前端使用RefreshToken申请一个全新Token继续使用。这种方案中,服务端只需要在客户端请求更新Token的时候对RefreshToken的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。当然RefreshToken也是有有效期的,但是这个有效期就可以长一点了。使用 Token 和 Refresh Token 的时序图如下:1)登录 图:来源于网络2)业务请求 图:来源于网络3)Token 过期,刷新 Token 图:来源于网络参考文献:发布于 2021-01-14 10:19tokenWeb 应用HTTP​赞同 91​​7 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录人工智能大数据学

用户身份验证的令牌——Token - 知乎

用户身份验证的令牌——Token - 知乎首发于人工智能大数据学习交流切换模式写文章登录/注册用户身份验证的令牌——Token企通查北京奥德塔数据科技有限公司Token是什么?所谓的Token,其实就是服务端生成的一串加密字符串、以作客户端进行请求的一个“令牌”。当用户第一次使用账号密码成功进行登录后,服务器便生成一个Token及Token失效时间并将此返回给客户端,若成功登陆,以后客户端只需在有效时间内带上这个Token前来请求数据即可,无需再次带上用户名和密码。图:来源于网络拿实际过程举例,当你下载QQ或微信后第一次用账号和密码成功登录后,Token就为我们免去了每次打开应用都要输入账号跟密码的过程。为什么要使用Token?为什么要使用Token?这个问题其实很好回答——因为它能解决问题!当下用户对产品的使用体验要求在逐渐提高,从产品体验方面来讲,Token带来的体验更容易能让用户接受。那么Token都可以解决哪些问题呢?Token具有随机性、不可预测性、时效性、无状态、跨域等特点。 Token完全由应用管理,所以它可以避开同源策略Token可以避免CSRF攻击Token可以是无状态的,可以在多个服务间共享Token是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回Token给前端。前端可以在每次请求的时候带上Token证明自己的合法地位。如果这个Token在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。当然说到这里大家可能会想到,用服务器的session_id存储到cookies中也能做到,为什么非要用Token呢?网上有许多对比Token和session的文章,在此就不再赘述。其实小编觉得,如果是开发web应用的话,用两者都可以,但如果是开发API接口,前后端分离,最好使用Token,因为session+cookies是基于web的,但针对API接口可能会考虑到移动端,app是没有cookies和session的。Token的生命周期1)用户未登录用户执行注册/登录→一旦基础数据校验成功,后端生成Token,并且Token包含此次注册/登录用户的用户名并通过JsonResponse返回给前端→前端拿到返回的Token后,存入浏览器本地存储2)用户每次访问博客页面从本地存储中拿出Token→JS将Token 放入request的Authorization头,发送http请求向后端索要数据→服务器接到前端请求(当前URL加了loging_check,并且请求方法在methods参数中),进行校验→从requestAuthorization头拿出Token→校验→校验不通过,返回前端异常代码/校验通过,正常执行对应的视图函数→前端一旦接到关于Token的异常码,则删除本地存储中的Token,且将用户转至登录界面。如何设置Token的有效期?其实Token作为一个概念模型,开发者完全可以针对自己开发的应用自定义Token,只要能做到不让不法分子钻系统漏洞即可。那么为Token设置有效期还有必要吗?对于这个问题,大家不妨先看两个例子:例1:登录密码登录密码一般要求定期改变密码,以防止泄漏,所以密码是有有效期的。例2:安全证书SSL安全证书都有有效期,目的是为了解决吊销的问题。所以无论是从安全的角度考虑,还是从吊销的角度考虑,Token都需要设有效期。那么,Token的有效期多长合适呢?一般来说,基于系统安全的需要当然需要尽可能的短,但也不能短得离谱:如果在用户正常操作的过程中,Token过期失效要求重新登录,用户体验岂不是很糟糕?为了解决在操作过程不让用户感到Token失效的问题,有一种方案是在服务器端保存Token状态,用户每次操作都会自动刷新(推迟)Token的过期时间。如此操作会存在一个问题,即在前后端分离、单页App等情况下,每秒可能发起多次请求,如果每次都去刷新过期时间会产生非常大的代价,同样地,如果Token的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率、减少消耗,会把Token的过期时保存在缓存或者内存中。另一种方案是使用RefreshToken,它可以避免频繁的读写操作。这种方案中,服务端无需刷新Token的过期时间,一旦Token过期,就反馈给前端,前端使用RefreshToken申请一个全新Token继续使用。这种方案中,服务端只需要在客户端请求更新Token的时候对RefreshToken的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。当然RefreshToken也是有有效期的,但是这个有效期就可以长一点了。使用 Token 和 Refresh Token 的时序图如下:1)登录 图:来源于网络2)业务请求 图:来源于网络3)Token 过期,刷新 Token 图:来源于网络参考文献:发布于 2021-01-14 10:19tokenWeb 应用HTTP​赞同 91​​7 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录人工智能大数据学

什么是Token?Token有什么用处?为什么使用它?Token认证又是什么? - ahaMOMO - 博客园

什么是Token?Token有什么用处?为什么使用它?Token认证又是什么? - ahaMOMO - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

ahaMOMO

博客园

首页

新随笔

联系

订阅

管理

什么是Token?Token有什么用处?为什么使用它?Token认证又是什么?

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

我当时的脑子只有???

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

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

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

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

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

对称加密与非对称加密具体应用(https原理):https://juejin.im/entry/5942061dda2f600067541114

什么是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...看了那么多,我希望下次面试官问我登录页面怎么设计的时候,我可以说一番长篇大论哈哈哈。

对称加密与非对称加密具体应用(https原理):https://juejin.im/entry/5942061dda2f600067541114

原文链接:https://juejin.im/post/5a6c60166fb9a01caf37a5e5

 

posted @

2020-02-27 18:15 

ahaMOMO 

阅读(23149) 

评论(0) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

公告

Copyright © 2024 ahaMOMO

Powered by .NET 8.0 on Kubernetes

什么是Token?Token有什么用处?为什么使用它?Token认证又是什么? - ahaMOMO - 博客园

什么是Token?Token有什么用处?为什么使用它?Token认证又是什么? - ahaMOMO - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

ahaMOMO

博客园

首页

新随笔

联系

订阅

管理

什么是Token?Token有什么用处?为什么使用它?Token认证又是什么?

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

我当时的脑子只有???

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

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

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

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

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

对称加密与非对称加密具体应用(https原理):https://juejin.im/entry/5942061dda2f600067541114

什么是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...看了那么多,我希望下次面试官问我登录页面怎么设计的时候,我可以说一番长篇大论哈哈哈。

对称加密与非对称加密具体应用(https原理):https://juejin.im/entry/5942061dda2f600067541114

原文链接:https://juejin.im/post/5a6c60166fb9a01caf37a5e5

 

posted @

2020-02-27 18:15 

ahaMOMO 

阅读(23149) 

评论(0) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

公告

Copyright © 2024 ahaMOMO

Powered by .NET 8.0 on Kubernetes

用户身份验证的令牌——Token - 知乎

用户身份验证的令牌——Token - 知乎首发于人工智能大数据学习交流切换模式写文章登录/注册用户身份验证的令牌——Token企通查北京奥德塔数据科技有限公司Token是什么?所谓的Token,其实就是服务端生成的一串加密字符串、以作客户端进行请求的一个“令牌”。当用户第一次使用账号密码成功进行登录后,服务器便生成一个Token及Token失效时间并将此返回给客户端,若成功登陆,以后客户端只需在有效时间内带上这个Token前来请求数据即可,无需再次带上用户名和密码。图:来源于网络拿实际过程举例,当你下载QQ或微信后第一次用账号和密码成功登录后,Token就为我们免去了每次打开应用都要输入账号跟密码的过程。为什么要使用Token?为什么要使用Token?这个问题其实很好回答——因为它能解决问题!当下用户对产品的使用体验要求在逐渐提高,从产品体验方面来讲,Token带来的体验更容易能让用户接受。那么Token都可以解决哪些问题呢?Token具有随机性、不可预测性、时效性、无状态、跨域等特点。 Token完全由应用管理,所以它可以避开同源策略Token可以避免CSRF攻击Token可以是无状态的,可以在多个服务间共享Token是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回Token给前端。前端可以在每次请求的时候带上Token证明自己的合法地位。如果这个Token在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。当然说到这里大家可能会想到,用服务器的session_id存储到cookies中也能做到,为什么非要用Token呢?网上有许多对比Token和session的文章,在此就不再赘述。其实小编觉得,如果是开发web应用的话,用两者都可以,但如果是开发API接口,前后端分离,最好使用Token,因为session+cookies是基于web的,但针对API接口可能会考虑到移动端,app是没有cookies和session的。Token的生命周期1)用户未登录用户执行注册/登录→一旦基础数据校验成功,后端生成Token,并且Token包含此次注册/登录用户的用户名并通过JsonResponse返回给前端→前端拿到返回的Token后,存入浏览器本地存储2)用户每次访问博客页面从本地存储中拿出Token→JS将Token 放入request的Authorization头,发送http请求向后端索要数据→服务器接到前端请求(当前URL加了loging_check,并且请求方法在methods参数中),进行校验→从requestAuthorization头拿出Token→校验→校验不通过,返回前端异常代码/校验通过,正常执行对应的视图函数→前端一旦接到关于Token的异常码,则删除本地存储中的Token,且将用户转至登录界面。如何设置Token的有效期?其实Token作为一个概念模型,开发者完全可以针对自己开发的应用自定义Token,只要能做到不让不法分子钻系统漏洞即可。那么为Token设置有效期还有必要吗?对于这个问题,大家不妨先看两个例子:例1:登录密码登录密码一般要求定期改变密码,以防止泄漏,所以密码是有有效期的。例2:安全证书SSL安全证书都有有效期,目的是为了解决吊销的问题。所以无论是从安全的角度考虑,还是从吊销的角度考虑,Token都需要设有效期。那么,Token的有效期多长合适呢?一般来说,基于系统安全的需要当然需要尽可能的短,但也不能短得离谱:如果在用户正常操作的过程中,Token过期失效要求重新登录,用户体验岂不是很糟糕?为了解决在操作过程不让用户感到Token失效的问题,有一种方案是在服务器端保存Token状态,用户每次操作都会自动刷新(推迟)Token的过期时间。如此操作会存在一个问题,即在前后端分离、单页App等情况下,每秒可能发起多次请求,如果每次都去刷新过期时间会产生非常大的代价,同样地,如果Token的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率、减少消耗,会把Token的过期时保存在缓存或者内存中。另一种方案是使用RefreshToken,它可以避免频繁的读写操作。这种方案中,服务端无需刷新Token的过期时间,一旦Token过期,就反馈给前端,前端使用RefreshToken申请一个全新Token继续使用。这种方案中,服务端只需要在客户端请求更新Token的时候对RefreshToken的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。当然RefreshToken也是有有效期的,但是这个有效期就可以长一点了。使用 Token 和 Refresh Token 的时序图如下:1)登录 图:来源于网络2)业务请求 图:来源于网络3)Token 过期,刷新 Token 图:来源于网络参考文献:发布于 2021-01-14 10:19tokenWeb 应用HTTP​赞同 91​​7 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录人工智能大数据学

用户身份验证的令牌——Token - 知乎

用户身份验证的令牌——Token - 知乎首发于人工智能大数据学习交流切换模式写文章登录/注册用户身份验证的令牌——Token企通查北京奥德塔数据科技有限公司Token是什么?所谓的Token,其实就是服务端生成的一串加密字符串、以作客户端进行请求的一个“令牌”。当用户第一次使用账号密码成功进行登录后,服务器便生成一个Token及Token失效时间并将此返回给客户端,若成功登陆,以后客户端只需在有效时间内带上这个Token前来请求数据即可,无需再次带上用户名和密码。图:来源于网络拿实际过程举例,当你下载QQ或微信后第一次用账号和密码成功登录后,Token就为我们免去了每次打开应用都要输入账号跟密码的过程。为什么要使用Token?为什么要使用Token?这个问题其实很好回答——因为它能解决问题!当下用户对产品的使用体验要求在逐渐提高,从产品体验方面来讲,Token带来的体验更容易能让用户接受。那么Token都可以解决哪些问题呢?Token具有随机性、不可预测性、时效性、无状态、跨域等特点。 Token完全由应用管理,所以它可以避开同源策略Token可以避免CSRF攻击Token可以是无状态的,可以在多个服务间共享Token是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回Token给前端。前端可以在每次请求的时候带上Token证明自己的合法地位。如果这个Token在服务端持久化(比如存入数据库),那它就是一个永久的身份令牌。当然说到这里大家可能会想到,用服务器的session_id存储到cookies中也能做到,为什么非要用Token呢?网上有许多对比Token和session的文章,在此就不再赘述。其实小编觉得,如果是开发web应用的话,用两者都可以,但如果是开发API接口,前后端分离,最好使用Token,因为session+cookies是基于web的,但针对API接口可能会考虑到移动端,app是没有cookies和session的。Token的生命周期1)用户未登录用户执行注册/登录→一旦基础数据校验成功,后端生成Token,并且Token包含此次注册/登录用户的用户名并通过JsonResponse返回给前端→前端拿到返回的Token后,存入浏览器本地存储2)用户每次访问博客页面从本地存储中拿出Token→JS将Token 放入request的Authorization头,发送http请求向后端索要数据→服务器接到前端请求(当前URL加了loging_check,并且请求方法在methods参数中),进行校验→从requestAuthorization头拿出Token→校验→校验不通过,返回前端异常代码/校验通过,正常执行对应的视图函数→前端一旦接到关于Token的异常码,则删除本地存储中的Token,且将用户转至登录界面。如何设置Token的有效期?其实Token作为一个概念模型,开发者完全可以针对自己开发的应用自定义Token,只要能做到不让不法分子钻系统漏洞即可。那么为Token设置有效期还有必要吗?对于这个问题,大家不妨先看两个例子:例1:登录密码登录密码一般要求定期改变密码,以防止泄漏,所以密码是有有效期的。例2:安全证书SSL安全证书都有有效期,目的是为了解决吊销的问题。所以无论是从安全的角度考虑,还是从吊销的角度考虑,Token都需要设有效期。那么,Token的有效期多长合适呢?一般来说,基于系统安全的需要当然需要尽可能的短,但也不能短得离谱:如果在用户正常操作的过程中,Token过期失效要求重新登录,用户体验岂不是很糟糕?为了解决在操作过程不让用户感到Token失效的问题,有一种方案是在服务器端保存Token状态,用户每次操作都会自动刷新(推迟)Token的过期时间。如此操作会存在一个问题,即在前后端分离、单页App等情况下,每秒可能发起多次请求,如果每次都去刷新过期时间会产生非常大的代价,同样地,如果Token的过期时间被持久化到数据库或文件,代价就更大了。所以通常为了提升效率、减少消耗,会把Token的过期时保存在缓存或者内存中。另一种方案是使用RefreshToken,它可以避免频繁的读写操作。这种方案中,服务端无需刷新Token的过期时间,一旦Token过期,就反馈给前端,前端使用RefreshToken申请一个全新Token继续使用。这种方案中,服务端只需要在客户端请求更新Token的时候对RefreshToken的有效性进行一次检查,大大减少了更新有效期的操作,也就避免了频繁读写。当然RefreshToken也是有有效期的,但是这个有效期就可以长一点了。使用 Token 和 Refresh Token 的时序图如下:1)登录 图:来源于网络2)业务请求 图:来源于网络3)Token 过期,刷新 Token 图:来源于网络参考文献:发布于 2021-01-14 10:19tokenWeb 应用HTTP​赞同 91​​7 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录人工智能大数据学

什么是Token?Token有什么用处?为什么使用它?Token认证又是什么? - ahaMOMO - 博客园

什么是Token?Token有什么用处?为什么使用它?Token认证又是什么? - ahaMOMO - 博客园

会员

周边

新闻

博问

AI培训

云市场

所有博客

当前博客

我的博客

我的园子

账号设置

简洁模式 ...

退出登录

注册

登录

ahaMOMO

博客园

首页

新随笔

联系

订阅

管理

什么是Token?Token有什么用处?为什么使用它?Token认证又是什么?

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

我当时的脑子只有???

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

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

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

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

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

对称加密与非对称加密具体应用(https原理):https://juejin.im/entry/5942061dda2f600067541114

什么是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...看了那么多,我希望下次面试官问我登录页面怎么设计的时候,我可以说一番长篇大论哈哈哈。

对称加密与非对称加密具体应用(https原理):https://juejin.im/entry/5942061dda2f600067541114

原文链接:https://juejin.im/post/5a6c60166fb9a01caf37a5e5

 

posted @

2020-02-27 18:15 

ahaMOMO 

阅读(23149) 

评论(0) 

编辑 

收藏 

举报

会员力量,点亮园子希望

刷新页面返回顶部

公告

Copyright © 2024 ahaMOMO

Powered by .NET 8.0 on Kubernetes

什么是token?你是怎么理解token? - 知乎

什么是token?你是怎么理解token? - 知乎切换模式写文章登录/注册什么是token?你是怎么理解token?星光说日常分享丨学习干货丨种草答主1、Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。2、Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。3、使用Token的目的:  Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。发布于 2021-03-31 23:32客户端token服务端​赞同 34​​2 条评论​分享​喜欢​收藏​申请

深入理解令牌认证机制(token) - 知乎

深入理解令牌认证机制(token) - 知乎切换模式写文章登录/注册深入理解令牌认证机制(token)aaronblogweb前端小菜鸡以前的开发模式是以MVC为主,但是随着互联网行业快速的发展逐渐的演变成了前后端分离,若项目中需要做登录的话,那么token成为前后端唯一的一个凭证。token即标志、记号的意思,在IT领域也叫作令牌。在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。例如在USB1.1协议中定义了4类数据包:token包、data包、handshake包和special包。主机和USB设备之间连续数据的交换可以分为三个阶段,第一个阶段由主机发送token包,不同的token包内容不一样(暗号不一样)可以告诉设备做不同的工作,第二个阶段发送data包,第三个阶段由设备返回一个handshake包。在HTTP请求中使用承载令牌来访问OAuth 2.0受保护的资源。拥有承载令牌的任何一方(“承载方”)都可以使用它访问相关资源(无需证明拥有加密密钥)。为了防止误用,需要防止在存储和传输中泄露承载令牌。OAuth允许客户端通过获取访问令牌,它在“OAuth 2.0授权”中定义框架“[RFC6749]作为”表示访问的字符串而不是使用资源直接服务的凭证。该令牌由服务端允许的情况下,由客户端通过某种方式向服务端发出请求,由服务端向客户端发出,客户机使用访问令牌访问由资源服务器承载的受保护的资源。该规范描述了当OAuth访问令牌是承载令牌时,如何发出受保护的资源请求。客户端只需要拥有token可以以任何一种方法传递token,客户端需要知道参数加密的密钥,只需要存储token即可。OAuth为客户端提供了一种方法来代表资源所有者访问受保护的资源。在一般情况下,客户机在访问受保护的资源之前,必须首先从资源所有者获得授权,然后将授权交换为访问令牌。访问令牌表示授权授予授予的范围、持续时间和其他属性。客户机通过向资源服务器显示访问令牌来访问受保护的资源。在某些情况下,客户端可以直接向服务端显示的发送自己的凭证。+--------+ +---------------+

| |--(A)- Authorization Request ->| Resource |

| | | Owner |

| |<-(B)-- Authorization Grant ---| |

| | +---------------+

| |

| | +---------------+

| |--(C)-- Authorization Grant -->| Authorization |

| Client | | Server |

| |<-(D)----- Access Token -------| |

| | +---------------+

| |

| | +---------------+

| |--(E)----- Access Token ------>| Resource |

| | | Server |

| |<-(F)--- Protected Resource ---| |

+--------+ +---------------+此方案的Authorization头字段的语法遵循[RFC2617]第2节中定义的基本方案的用法。注意,与Basic一样,它不符合[RFC2617]第1.2节中定义的通用语法,但与正在为HTTP 1.1 [HTTP- auth]开发的通用身份验证框架兼容,尽管它没有遵循其中列出的反映现有部署的首选实践。承载凭证的语法如下b64toke = 1*( ALPHA / DIGIT / "-" / "." / "_" / "~" / "+" / "/" ) *"="

credentials = "Bearer" 1*SP b64token客户端应该使用带有承载HTTP授权方案的Authorization请求头字段使用承载令牌发出经过身份验证的请求。资源服务器必须支持此方法。在Internet Engineering Task Force (IETF)的白皮书中介绍Bearer Token的使用方法,那么我们平时使用token的时候姿势是否正确。应该如何正确使用token呢?import axios from "axios";

axios.interceptors.request.use(config => {

if (store.state.token) {

config.headers.authorization = `Basic ${store.state.token}`;

}

return config;

});

照白皮书所说这样才是正确使用token的姿势。小伙伴们平时你们使用token的时候是这样的吗?那么除了前端有明确的使用规范,那么服务端又应该怎样有效的做好后端数据防护?在白皮书中同样也有提到过。根据OAuth 2.0动态客户端注册协议该规范定义了向授权服务器动态注册OAuth 2.0客户端的机制。注册请求向授权服务器发送一组所需的客户端元数据值(token)。结果的注册响应返回要在授权服务器上使用的客户机标识符和为客户机注册的客户机元数据值。然后,客户机可以使用此注册信息使用OAuth 2.0协议与授权服务器通信。该规范还定义了一组通用客户端元数据字段和值,供客户端在注册期间使用。为了让OAuth 2.0 [RFC6749]客户机利用OAuth 2.0授权服务器,客户机需要与服务器交互的特定信息,包括在该服务器上使用的OAuth 2.0客户端标识符。该规范描述了如何通过授权服务器动态注册OAuth 2.0客户端来获取此信息。抽象的动态客户端注册流程+--------(A)- Initial Access Token (OPTIONAL)

|

| +----(B)- Software Statement (OPTIONAL)

| |

v v

+-----------+ +---------------+

| |--(C)- Client Registration Request -->| Client |

| Client or | | Registration |

| Developer |<-(D)- Client Information Response ---| Endpoint |

| | or Client Error Response +---------------+

+-----------+图中所示的抽象OAuth 2.0客户机动态注册流描述了客户机或开发人员与此规范中定义的端点之间的交互。此图没有显示错误条件。这个流程包括以下步骤可选地,向客户端或开发人员发出初始访问令牌,允许访问客户端注册端点。向客户端或开发人员发出初始访问令牌的方法超出了本规范的范围。客户端或开发人员可以选择发布一个软件声明,以便与客户端注册端点一起使用。向客户端或开发人员发出软件声明的方法超出了本规范的范围。客户端或开发人员使用客户端所需的注册元数据调用客户端注册端点,如果授权服务器需要初始访问令牌,则可以选择包含来自(A)的初始访问令牌。授权服务器注册客户机并返回客户端注册的元数据, 在服务器上唯一的客户端标识符,以及一组客户端凭据,如客户端机密(如果适用于此客户端)。授权类型与响应类型之间的关系描述的grant类型和响应类型值是部分正交的,因为它们引用传递到OAuth协议中不同端点的参数。但是,它们是相关的,因为客户机可用的grant类型影响客户机可以使用的响应类型,反之亦然。例如,包含授权代码的授权类型值意味着包含代码的响应类型值,因为这两个值都定义为OAuth 2.0授权代码授权的一部分。因此,支持这些字段的服务器应该采取步骤,以确保客户机不能将自己注册到不一致的状态,例如,通过向不一致的注册请求返回无效的客户机元数据错误响应。下表列出了这两个字段之间的相关性。+-----------------------------------------------+-------------------+

| grant_types value includes: | response_types |

| | value includes: |

+-----------------------------------------------+-------------------+

| authorization_code | code |

| implicit | token |

| password | (none) |

| client_credentials | (none) |

| refresh_token | (none) |

| urn:ietf:params:oauth:grant-type:jwt-bearer | (none) |

| urn:ietf:params:oauth:grant-type:saml2-bearer | (none) |

+-----------------------------------------------+-------------------+向授予类型或响应类型参数引入新值的此文档的扩展和概要文件必须记录这两种参数类型之间的所有通信。如果发送任何人类可读的字段时没有使用语言标记,那么使用该字段的各方不能对字符串值的语言、字符集或脚本做出任何假设,而且字符串值必须按照在用户界面中显示的位置使用。为了促进互操作性,建议客户端和服务器除了使用任何特定于语言的字段外,还使用不使用任何语言标记的人可读字段,并且建议发送的任何不使用语言标记的人可读字段包含适合在各种系统上显示的值。例如,软件声明可以包含以下声明:{

"software_id": "4NRB1-0XZABZI9E6-5SM3R",

"client_name": "Example Statement-based Client",

"client_uri": "https://client.example.net/"

}以下非标准示例JWT包括这些声明,并且使用RS256(仅用于显示目的)进行了非对称签名。并等到如下加密字符串。eyJhbGciOiJSUzI1NiJ9.

eyJzb2Z0d2FyZV9pZCI6IjROUkIxLTBYWkFCWkk5RTYtNVNNM1IiLCJjbGll

bnRfbmFtZSI6IkV4YW1wbGUgU3RhdGVtZW50LWJhc2VkIENsaWVudCIsImNs

aWVudF91cmkiOiJodHRwczovL2NsaWVudC5leGFtcGxlLm5ldC8ifQ.

GHfL4QNIrQwL18BSRdE595T9jbzqa06R9BT8w409x9oIcKaZo_mt15riEXHa

zdISUvDIZhtiyNrSHQ8K4TvqWxH6uJgcmoodZdPwmWRIEYbQDLqPNxREtYn0

5X3AR7ia4FRjQ2ojZjk5fJqJdQ-JcfxyhK-P8BAWBd6I2LLA77IG32xtbhxY

fHX7VhuU5ProJO8uvu3Ayv4XRhLZJY4yKfmyjiiKiPNe-Ia4SMy_d_QSWxsk

U5XIQl5Sa2YRPMbDRXttm2TfnZM1xx70DoYi8g6czz-CPGRi4SW_S2RKHIJf

IjoI3zTJ0Y2oe0_EJAiXbL6OyF9S5tKxDXV8JIndSA加密字符串由头,载荷以及密钥通过一系列的速算法生成,加密字符串与头,载荷以及密钥息息相关,一但加密字符串稍有改动,则无法解析正确解析无法通过验证。通过加密字符串向授权服务器注册客户端。授权服务器为该客户端分配一个惟一的客户端标识符,可选地分配一个客户端机密,并将请求中提供的元数据与已发布的客户端标识符关联起来。该请求包括在注册期间为客户端指定的任何客户端元数据参数。授权服务器可以为客户端元数据中遗漏的任何项提供默认值。注册端点,内容类型为application/json。该HTTP Entity Payload是一个由JSON组成的JSON文档对象和所有请求的客户端元数据值作为顶级成员那个JSON对象。示例:const Koa = require("koa");

const Router = require("koa-router");

const jwt = require("jsonwebtoken");

const jwtAuth = require("koa-jwt");

const secret = "it's a secret"; // 密钥

const app = new Koa();

const router = new Router();

router.get('/api/login',async (ctx) => {

const {username,passwd} = ctx.query;

if(username === "aaron" && passwd == "123456"){

const token = jwt.sign({

data:{name:"Aaron",userId:"1"}, // 用户信息

exp:Math.floor(Date.now()/1000)+60*60 // 过期时间

},secret);

ctx.body = {code:200,token};

}

else{

ctx.status = 401;

ctx.body = {code:0,message: "用户名密码错误"};

}

});

router.get("/api/userinfo",jwtAuth({secret}),async (ctx) => { // jwtAuth受保护路由

ctx.body = {code:200,data:{name:"Aaron",age:18}}

});

app.use(router.routes());

app.listen(3000);

因为最后生成的token是通过base64加密的,有些内容是可以反解的,所以千万不要在数据里面添加有关数据的敏感信息。注意注意。。。发布于 2019-03-25 18:38Node.jsJSON Web Token(JWT)​赞同 19​​4 条评论​分享​喜欢​收藏​申请

计算机里面token是什么意思? - 知乎

计算机里面token是什么意思? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册计算机计算机科学计算机网络(库罗斯,罗斯 著)(书籍)计算机里面token是什么意思?关注者7被浏览11,794关注问题​写回答​邀请回答​好问题​添加评论​分享​4 个回答默认排序知乎用户​游戏开发等 2 个话题下的优秀答主我们在古装剧里面经常看到什么免死金牌,定情信物,认亲玉佩之类的东西。token就是这样一种东西。本身是一串数字(或者字符),发行方生成它并将它传递给使用方,代表了发行方的认可和授权。和密码的主要差别在于密码是自己生成,然后证明自己的身份。token是别人生成给你,然后证明别人对你的授权。编辑于 2022-11-06 20:03​赞同 13​​2 条评论​分享​收藏​喜欢收起​薛钦亮人大码农,爱国爱党,要为祖国健康工作五十年​ 关注token可以理解为标记或者令牌,区块链和网络领域的话,类似于一个通行证用于验证使用。如果是计算机中的人工智能领域,token更像是代表一部分数据的一个表示,比如自然语言处理领域一个词的表示可能可以叫一个token,视觉领域里面可能图片切割之后的一块区域的表示叫一个token。如理解有误,请网友指正。发布于 2022-11-02 21:49​赞同 3​​添加评论​分享​收藏​喜欢收起​​

Token(计算机术语)_百度百科

n(计算机术语)_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心Token是一个多义词,请在下列义项上选择浏览(共3个义项)展开添加义项Token播报讨论上传视频计算机术语收藏查看我的收藏0有用+10Token在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。中文名令牌,标记外文名Token学    科信息技术(IT)词    性名词目录1令牌2标记3其它▪网络▪数据处理4相关术语令牌播报编辑(信息安全术语)Token, 令牌,代表执行某些操作的权利的对象访问令牌(Access token)表示访问控制操作主体的系统对象邀请码,在邀请系统中使用Token, Petri 网(Petri net)理论中的Token密保令牌(Security token),或者硬件令牌,例如U盾,或者叫做认证令牌或者加密令牌,一种计算机身份校验的物理设备会话令牌(Session token),交互会话中唯一身份标识符令牌化技术 (Tokenization), 取代敏感信息条目的处理过程标记播报编辑(编译原理术语)词法分析是计算机科学中将字符序列转换为标记(token)序列的过程。从输入字符流中生成标记的过程叫作标记化(tokenization),在这个过程中,词法分析器还会对标记进行分类。其它播报编辑网络Token ring 即 令牌环网,网络技术里面的:令牌是一种能够控制站点占有媒体的特殊帧,以区别数据帧及其他控制帧。数据处理token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。例如在USB1.1协议中定义了4类数据包:token包、data包、handshake包和special包。主机和USB设备之间连续数据的交换可以分为三个阶段,第一个阶段由主机发送token包,不同的token包内容不一样(暗号不一样)可以告诉设备做不同的工作,第二个阶段发送data包,第三个阶段由设备返回一个handshake包。相关术语播报编辑token相关的计算机术语很多,例如Token Passing、Token Ring、Token Bus等,具体参考一些计算机令牌方面的资料。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

什么是token?-腾讯云开发者社区-腾讯云

oken?-腾讯云开发者社区-腾讯云我不是费圆什么是token?关注作者腾讯云开发者社区文档建议反馈控制台首页学习活动专区工具TVP最新优惠活动文章/答案/技术大牛搜索搜索关闭发布登录/注册首页学习活动专区工具TVP最新优惠活动返回腾讯云官网我不是费圆首页学习活动专区工具TVP最新优惠活动返回腾讯云官网社区首页 >专栏 >什么是token?什么是token?我不是费圆关注发布于 2020-09-22 10:18:311.1K0发布于 2020-09-22 10:18:31举报文章被收录于专栏:鲸鱼动画鲸鱼动画什么是token?  token就是令牌,前后端进行鉴权的一种有效形式,比传统的 session 鉴权更加方便,简单来说:当用户首次登陆时,网站会给你一张“门卡”,以后你可以凭借门卡直接进入,而无需再次申请。但一段时间之后门卡实效,你需要再到前台充磁,这里的门卡就是 token

  那么它的用途有哪些呢?

  进行跨域,简单操作,特别适合前后端分离项目。本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。 原始发表:2020-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除前往查看网站sessiontoken跨域前后端分离本文分享自 作者个人站点/博客 前往查看如有侵权,请联系 cloudcommunity@tencent.com 删除。本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!网站sessiontoken跨域前后端分离评论登录后参与评论0 条评论热度最新登录 后参与评论推荐阅读LV.关注文章0获赞0目录什么是token?领券社区专栏文章阅读清单互动问答技术沙龙技术视频团队主页腾讯云TI平台活动自媒体分享计划邀请作者入驻自荐上首页技术竞赛资源技术周刊社区标签开发者手册开发者实验室关于社区规范免责声明联系我们友情链接腾讯云开发者扫码关注腾讯云开发者领取腾讯云代金券热门产品域名注册云服务器区块链服务消息队列网络加速云数据库域名解析云存储视频直播热门推荐人脸识别腾讯会议企业云CDN加速视频通话图像分析MySQL 数据库SSL 证书语音识别更多推荐数据安全负载均衡短信文字识别云点播商标注册小程序开发网站监控数据迁移Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有 深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569腾讯云计算(北京)有限责任公司 京ICP证150476号 |  京ICP备11018762号 | 京公网安备号11010802020287问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档Copyright © 2013 - 2024 Tencent Cloud.All Rights Reserved. 腾讯云 版权所有登录 后参与评论00

基于Token的登录流程-腾讯云开发者社区-腾讯云

ken的登录流程-腾讯云开发者社区-腾讯云ayqy贾杰基于Token的登录流程关注作者腾讯云开发者社区文档建议反馈控制台首页学习活动专区工具TVP最新优惠活动文章/答案/技术大牛搜索搜索关闭发布登录/注册首页学习活动专区工具TVP最新优惠活动返回腾讯云官网ayqy贾杰首页学习活动专区工具TVP最新优惠活动返回腾讯云官网社区首页 >专栏 >基于Token的登录流程基于Token的登录流程ayqy贾杰关注发布于 2019-06-12 15:23:2812.9K0发布于 2019-06-12 15:23:28举报文章被收录于专栏:黯羽轻扬黯羽轻扬一.身份验证(Authentication)要想区分来自不同用户的请求的话,服务端需要根据客户端请求确认其用户身份,即身份验证在人机交互中,身份验证意味着要求用户登录才能访问某些信息。而为了确认用户身份,用户必须提供只有用户和服务器知道的信息(即身份验证因子),比如用户名/密码Web 环境下,常见的身份验证方案分为 2 类:基于 Session 的验证基于 Token 的验证基于 Session 的方案中,登录成功后,服务端将用户的身份信息存储在 Session 里,并将 Session ID 通过 Cookie 传递给客户端。后续的数据请求都会带上 Cookie,服务端根据 Cookie 中携带的 Session ID 来得辨别用户身份而在基于 Token 的方案中,服务端根据用户身份信息生成 Token,发放给客户端。客户端收好 Token,并在之后的数据请求中带上 Token,服务端接到请求后校验并解析 Token 得出用户身份,过程如下:token based loginP.S.用户名/密码属于知识因子,另外还有占有因子和遗传因子:知识因子:用户登录时必须知道的东西都是知识因子,比如用户名、密码等占有因子:用户登录时必须具备的东西,比如密码令牌、ID 卡等遗传因子:个人的生物特征,比如指纹、虹膜、人脸等P.S.Authentication(验证)与 Authorization(授权)不同,前者验证身份,后者验证权限二.Token身份验证中的 Token 就像身份证,由服务端签发/验证,并且在有效期内都具有合法性,认“证”(Token)不认“人”(用户)Session 方案中用户身份信息(以 Session 记录形式)存储在服务端。而 Token 方案中(以 Token 形式)存储在客户端,服务端仅验证 Token 合法性。这种区别在单点登录(SSO,Single Sign On)的场景最为明显:基于 Session 的 SSO:考虑如何同步 Session 和共享 Cookie。比如登录成功后把响应 Cookie 的 domain 设置为通配兄弟应用域名的形式,并且所有应用都从身份验证服务同步 Session基于 Token 的 SSO:考虑如何共享 Token。比如进入兄弟应用时通过 URL 带上 TokenToken 相当于加密过的 Session 记录,含有用户 ID 等身份信息,以及 Token 签发时间,有效期等用于 Token 合法性验证的元信息,例如:{

// 身份信息

user_id: 9527,

// Token元信息

issued_at: '2012年3月5号12点整',

expiration_time: '1天'

}

// 加密后

895u3485y3748%^HGdsbafjhb复制任何带有该 Token 的请求,都会被服务端认为是来自用户 9527 的消息,直到一天之后该 Token 过期失效,服务端不再认可其代表的用户身份Token 形式多种多样,其中,JSON Web Token是一种比较受欢迎的 Token 规范三.JSON Web TokenJSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties.简言之,一种通信规范(简称 JWT),用来安全地表示要在双方之间传递的声明,能够通过 URL 传输P.S.声明可以是任意的消息,比如用户身份验证场景中的“我是用户 XXX”,好友申请中的“用户 A 添加用户 B 为好友”Token 格式JWT 中的 Token 分为 3 部分,Header、Payload 与 Signature,例如:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLCJleHAiOjEzMDA4MTkzODAsImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlLCJvdGhlckZpZWxkIjoiZXRjLiJ9.BkrYadYHS66ZrONzFoA91gBJK0iE-S2ZYOWCpRhgFJQ复制两个.字符隔开三部分,即:Header.Payload.Signature复制含义上,Header表示 Token 相关的基本元信息,如 Token 类型、加密方式(算法)等,具体如下(alg是必填的,其余都可选):typ:Token typecty:Content typealg:Message authentication code algorithmPayload表示 Token 携带的数据及其它 Token 元信息,规范定义的标准字段如下:iss:Issuer,签发方sub:Subject,Token 信息主题(Sub identifies the party that this JWT carries information about)aud:Audience,接收方exp:Expiration Time,过期时间nbf:Not (valid) Before,生效时间iat:Issued at,生成时间jti:JWT ID,唯一标识这些字段都是可选的,Payload 只要是合法 JSON 即可生成Token 的三部分分别为:Base64编码的Header.Base64编码的Payload.对前两部分按指定算法加密的结果复制例如,对于// JOSE Header

const header = JSON.stringify({"typ":"JWT", "alg":"HS256"});

// JWT Claims Set

const claims = JSON.stringify({

"iss":"joe", "exp":1300819380, "http://example.com/is_root":true

});复制对 JOSE Header 和 JWT Claims Set 分别进行 Base64 编码得到 JWT Token 中的 Header 与 Payload 部分:const tokenHeader = Buffer.from(header).toString('base64');

const tokenPayload = Buffer.from(header).toString('base64');复制接着把 Header 与 Payload 用.字符连接起来,并通过 HMAC SHA-256 算法(Header 中alg字段指定的加密算法)加密,得到 Signature 部分:// https://www.npmjs.com/package/jwa

const jwa = require('jwa');

const hmac = jwa('HS256');

const toSign = `${tokenHeader}.${tokenPayload}`;

const tokenSignature = hmac.sign(toSign, 'mySecret');复制最后把 Signature 也用.字符连接在最后:const token = `${toSign}.${tokenSignature}`;复制得到结果:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLCJleHAiOjEzMDA4MTkzODAsImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlLCJvdGhlckZpZWxkIjoiZXRjLiJ9.BkrYadYHS66ZrONzFoA91gBJK0iE-S2ZYOWCpRhgFJQ复制P.S.可以通过JWT.IO解析验证该 TokenP.S.注意,Base64 编码的 Header 与 Payload 需要去掉末尾等号(padding trailing equals)传输服务端生成 Token 之后,放在响应体里传递到客户端客户端收到之后,将 Token 存放到 LocalStorage/SessionStorage 中,之后请求数据时,将 Token 塞到请求头的Authentication字段里带到服务端:Authorization: Bearer 复制服务端收到数据请求后,从Authorization字段取出 Token,并校验其合法性,进一步解析 Token 内容,获知用户身份验证校验 Token 合法性需要确认几件事情:Token 有没有过期是不是自己签发的从 Payload 部分解析(直接 Base64 解码)出iat、nbf和exp三个时间相关的字段,检查是否满足以下关系:iat签发时间 <= nbf生效时间 < 当前时间 < exp过期时间复制接着取出 Token 的前两部分(Header.Payload),再计算一次签名(Signature),看计算结果是否一致解析确认 Token 合法之后,只需要简单地对 Payload 进行 Base64 解码,即可得知 Token 携带的数据,例如:const token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJqb2UiLCJleHAiOjEzMDA4MTkzODAsImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlLCJvdGhlckZpZWxkIjoiZXRjLiJ9.BkrYadYHS66ZrONzFoA91gBJK0iE-S2ZYOWCpRhgFJQ';

const [_, rawPayload,] = token.split('.');

const payload = JSON.parse(new Buffer(rawPayload, 'base64').toString());

// { iss: 'joe',

// exp: 1300819380,

// 'http://example.com/is_root': true,

// otherField: 'etc.' }复制四.登录Session 方案中,Cookie 机制让登录变得很简单(客户端几乎无感知),将用户名和密码 Post 过去,返回 200,之后就是已登录用户了而在 Token 方案中,不一定将 Token 写入 Cookie,比如 SSO 场景下可能直接通过 URL 回传给应用。因此,登录之后的身份凭证对客户端而言是有感知的,客户端需要接收并管理 Token:存储 Token请求数据时带上 Token跳转时将 Token 共享给兄弟应用用户注销后删掉 Token同样地,请求数据时也不一定通过 Cookie 携带 Token,而是通过请求头的 Authentication 字段五.数据操作发送数据请求时,将 Token 以Bearer 的格式填入 Authorization 字段即可:Authorization: Bearer 复制P.S.Bearer(持有者认证)也叫 Token 认证,类似于我们所熟知的 Basic(基本认证)和 Digest(摘要认证),也是一种基于 HTTP 的认证方式服务端接到请求会从该字段中取出 Token,并进行校验,校验通过之后将期望的数据或操作结果响应发回客户端六.注销在基于 Session 的身份验证中,注销操作就是删掉 Session 中对应的记录。因为在 Session 模式下,用户的登录状态只以服务端 Session 记录为准,所以只要让服务端忘记这段感情,之后就不认得客户端抛来的媚眼了而 Token 验证则不同,Token 携带着完整的状态信息,服务端的角色更像是负责签发 Token 的认证中心(CA,Certificate Authority),发出去的 Token 在自动过期之前都是合法的,服务端仅通过验证 Token 无法区分合法 Token 与已经作废的(合法 Token)那么,有办法能让 Token 立即作废吗?其实,HTTPS 依赖的 SSL 证书也存在这个问题,所以有一份Certificate revocation list(证书吊销列表):In cryptography, a certificate revocation list (or CRL) is “a list of digital certificates that have been revoked by the issuing certificate authority (CA) before their scheduled expiration date and should no longer be trusted”.CRL 即证书黑名单,用来记录需要立即作废的合法证书,CA 验证证书之前先检查黑名单,以此区分出已经作废的合法 Token例如:// 1.维护黑名单

const tokenBlackLists = [];

function invalidateToken(token) {

if (!isTokenInvalidated(token)) {

tokenBlackLists.push(token);

}

}

function removeInalidatedToken(token) {

if (isTokenInvalidated(token)) {

tokenBlackLists.splice(tokenBlackLists.indexOf(token), 1);

}

}

function isTokenInvalidated(token) {

return tokenBlackLists.includes(token);

}

// 2.注销时加黑

router.get('/logout', ensureAuthenticated, (req, res, next) => {

// 废掉token

invalidateToken(res.locals.token);

res.status(200).json({

status: 'success'

});

});

// 3.过期时去黑

// 4.操作时验证是否已黑

decodeToken(token, (err, payload) => {

if (err) {

// remove expired token from blacklist

removeInalidatedToken(token);

return res.status(401).json({

status: 'Token has expired'

});

} else {

// check invalidated token

if (isTokenInvalidated(token)) {

return res.status(401).json({

status: 'Token has been invalidated'

});

}

//...

}

});复制P.S.上例中,黑名单只放在内存中,服务重启时会丢失,比较完备的实现应该是加黑/去黑(即过期)时落库,验证时走内存缓存,重启时读库加载除黑名单外,还有一些常见策略,如:删掉客户端 Token:把发出去的 Token 干掉,Token 消失了,登录状态也就不存在了。但服务端仍然认为 Token 合法,不安全用过期时间很短的 Token,经常轮转:过期时间足够短的话,自动过期就相当于立即过期。但太短又丧失了保持状态的优势Token 带上注销时间:把注销时间也像密码一样存库、校验,像改密码一样让 Token 立即作废。但需要多存/取、校验一个字段,性能相关必要的话,这 4 种策略可以多管齐下,比如无论使用哪种策略,客户端 Token 都是理应删掉的P.S.关于如何立即作废 JWT 的更多讨论,见:Invalidating JSON Web TokensHow to destroy JWT Tokens on logout?How to log out when using JWT:废话比较多七.FAQJWT 的 Payload 安全吗?

不安全,仅经 Base64 编码过,相当于明文传输,因此不要携带敏感数据用户输入的密码需要在客户端加密吗?

不需要加密,直接明文传,客户端密码安全由 SSL 保证服务端收到密码应该如何加密?

一般做法是 Hash 加盐(Adding Salt to Hashing),具体见Adding Salt to Hashing: A Better Way to Store Passwords参考资料JSON Web Token – 在 Web 应用间安全地传递信息八幅漫画理解使用 JSON Web Token 设计单点登录系统Token-Based Authentication with NodeRFC 7519 – JSON Web Token (JWT)JSON Web TokenA plain English introduction to JSON web tokens (JWT): what it is and what it isn’tUnderstanding User Authentication: 3 Basics You Should KnowThe proper way of implementing user login systemNode.js encryption of passwordshokaccha/node-jwt-simpleauth0/node-jsonwebtoken本文参与 腾讯云自媒体分享计划,分享自微信公众号。原始发表:2019-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除json网站网络安全html访问管理本文分享自 前端向后 微信公众号,前往查看如有侵权,请联系 cloudcommunity@tencent.com 删除。本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!json网站网络安全html访问管理评论登录后参与评论0 条评论热度最新登录 后参与评论推荐阅读LV.关注文章0获赞0目录一.身份验证(Authentication)二.Token三.JSON Web TokenToken 格式生成传输验证解析四.登录五.数据操作六.注销七.FAQ参考资料相关产品与服务访问管理访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。产品介绍产品文档2024新春采购节领券社区专栏文章阅读清单互动问答技术沙龙技术视频团队主页腾讯云TI平台活动自媒体分享计划邀请作者入驻自荐上首页技术竞赛资源技术周刊社区标签开发者手册开发者实验室关于社区规范免责声明联系我们友情链接腾讯云开发者扫码关注腾讯云开发者领取腾讯云代金券热门产品域名注册云服务器区块链服务消息队列网络加速云数据库域名解析云存储视频直播热门推荐人脸识别腾讯会议企业云CDN加速视频通话图像分析MySQL 数据库SSL 证书语音识别更多推荐数据安全负载均衡短信文字识别云点播商标注册小程序开发网站监控数据迁移Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有 深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569腾讯云计算(北京)有限责任公司 京ICP证150476号 |  京ICP备11018762号 | 京公网安备号11010802020287问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档Copyright © 2013 - 2024 Tencent Cloud.All Rights Reserved. 腾讯云 版权所有登录 后参与评论00

简单理解token机制 | 人人都是产品经理

简单理解token机制 | 人人都是产品经理

首页

培训课程

名师辅导课

产品经理入门实战班

90天B端产品实战班

AI重塑职场竞争力实战行动营

查看更多

个人自学课

互联网运营能力进阶

业务产品经理能力进阶

电商产品经理从入门到进阶

查看更多

企业内训课

数字化产品经理课

商业化产品实战课

数字化营销体系课

B端运营实战课

私域流量实战课

数据分析体系课

查看更多

分类浏览

业界动态

27987篇文章

产品设计

18072篇文章

产品运营

14480篇文章

产品经理

9484篇文章

职场攻略

4964篇文章

营销推广

4490篇文章

交互体验

3733篇文章

分析评测

3254篇文章

创业学院

2119篇文章

用户研究

1755篇文章

数据分析

1719篇文章

原型设计

1420篇文章

活动讲座

问答

企业培训

摸鱼

快讯

搜索

APP

起点课堂会员权益

职业体系课特权

线下行业大会特权

个人IP打造特权

30+门专项技能课

1300+专题课程

12场职场软技能直播

12场求职辅导直播

12场专业技能直播

会员专属社群

荣耀标识

{{ userInfo.member ? '查看权益' : '开通会员' }}

发布

注册 | 登录

登录人人都是产品经理即可获得以下权益

关注优质作者

收藏优质内容

查阅浏览足迹

免费发布作品

参与提问答疑

交流互动学习

立即登录

首次使用?

点我注册

简单理解token机制

流年

2017-12-15

6 评论

56715 浏览

206 收藏

8 分钟

释放双眼,带上耳机,听听看~!

00:00

00:00

在简单理解cookie/session机制这篇文章中,简要阐述了cookie和session的原理。本文将要简单阐述另一个同cookie/session同样重要的技术术语:token。

什么是token

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

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

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

身份认证概述

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

通用的解决方法就是,当用户请求登录的时候,如果没有问题,在服务端生成一条记录,在这个记录里可以说明登录的用户是谁,然后把这条记录的id发送给客户端,客户端收到以后把这个id存储在cookie里,下次该用户再次向服务端发送请求的时候,可以带上这个cookie,这样服务端会验证一下cookie里的信息,看能不能在服务端这里找到对应的记录,如果可以,说明用户已经通过了身份验证,就把用户请求的数据返回给客户端。

以上所描述的过程就是利用session,那个id值就是sessionid。我们需要在服务端存储为用户生成的session,这些session会存储在内存,磁盘,或者数据库。

基于token机制的身份认证

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

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

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

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

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

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

服务端收到请求,然后去验证客户端请求里面带着token,如果验证成功,就向客户端返回请求的数据。

利用token机制进行登录认证,可以有以下方式:

a.用设备mac地址作为token

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

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

此方式客户端和服务端统一了唯一的标识,并且保证每一个设备拥有唯一的标识。缺点是服务器端需要保存mac地址;优点是客户端无需重新登录,只要登录一次以后一直可以使用,对于超时的问题由服务端进行处理。

b.用sessionid作为token

客户端:客户端携带用户名和密码登录

服务端:接收到用户名和密码后进行校验,正确就将本地获取的sessionid作为token返回给客户端,客户端以后只需带上请求的数据即可。

此方式的优点是方便,不用存储数据,缺点就是当session过期时,客户端必须重新登录才能请求数据。

当然,对于一些保密性较高的应用,可以采取两种方式结合的方式,将设备mac地址与用户名密码同时作为token进行认证。

APP利用token机制进行身份认证

用户在登录APP时,APP端会发送加密的用户名和密码到服务器,服务器验证用户名和密码,如果验证成功,就会生成相应位数的字符产作为token存储到服务器中,并且将该token返回给APP端。

以后APP再次请求时,凡是需要验证的地方都要带上该token,然后服务器端验证token,成功返回所需要的结果,失败返回错误信息,让用户重新登录。其中,服务器上会给token设置一个有效期,每次APP请求的时候都验证token和有效期。

token的存储

token可以存到数据库中,但是有可能查询token的时间会过长导致token丢失(其实token丢失了再重新认证一个就好,但是别丢太频繁,别让用户没事儿就去认证)。

为了避免查询时间过长,可以将token放到内存中。这样查询速度绝对就不是问题了,也不用太担心占据内存,就算token是一个32位的字符串,应用的用户量在百万级或者千万级,也是占不了多少内存的。

token的加密

token是很容易泄露的,如果不进行加密处理,很容易被恶意拷贝并用来登录。加密的方式一般有:

在存储的时候把token进行对称加密存储,用到的时候再解密。

文章最开始提到的签名sign:将请求URL、时间戳、token三者合并,通过算法进行加密处理。

最好是两种方式结合使用。

还有一点,在网络层面上token使用明文传输的话是非常危险的,所以一定要使用HTTPS协议。

总结

以上就是对于token在用户身份认证过程中的简单总结。希望没有技术背景的产品经理们在和开发哥哥沟通的时候不要再被这些技术术语问住了。

 

作者:流年,互联网产品设计师,4年互联网产品设计经验。

本文由 @流年 原创发布于人人都是产品经理。未经许可,禁止转载。

题图由作者提供

收藏已收藏{{ postmeta.bookmark }}

点赞已赞{{ postmeta.postlike }}

更多精彩内容,请关注人人都是产品经理微信公众号或下载App

2年token机制初级技术术语

流年

公众号“流年产品录”,不定期分享产品工作中的感悟

48篇作品

888991总阅读量

为你推荐

途家、木鸟与美团,三大民宿预订平台如何做私域?

08-083769 浏览

小红书出海,打不过“小黄书”

03-033849 浏览

短剧出海,如何做好本土化?

11-301058 浏览

大模型在数字化营销中的应用与实践

12-221093 浏览

用爆款思维做自媒体内容运营,只会让你越做越错

10-208890 浏览

评论

评论请登录

王小花

您好,您提到的“token的存储”是指存储在服务器端?还是客户端?

最近

来自北京 回复

PMhome123

请问token与session有什么区别或者联系吗?session可以有token组成吗?

最近

回复

相关人士

回复PMhome123

个人愚见:session是存储在服务器端的数据,可以包含很多东西,你可以理解为一个数据容器,需要时读取就行!token相当于通行证(唯一),用于前端向后台进行数据请求时进行判断“你”到底是不是“你”,类似于门禁卡!

最近

来自日本 回复

想去鹅城

回复相关人士

session是不是存储了信息,还可用于个性化推送

最近

来自广东 回复

相关人士

回复想去鹅城

个性化推送是一套算法,实质是:物以类聚、人以群分;基本方法有协同过滤等;这个需要获取用户数据(用户画像、社交数据、行为数据、上下文数据、标签等)和产品内容信息之间的关联度来综合推荐!用户行为数据一般不存在session中,主要是用户基数大;高基数维度比较多;数据量大;时序的特征。

最近

来自四川 回复

Anonymous

回复PMhome123

Session 是会话,即login到logout 这一段时间. token是保存credential信息的一种方式,可以用保存Session ID的方式来实现,文中也提到了

最近

回复

为你推荐

唯品会出海,“闷声”能否“发大财”?

01-101894 浏览

微信门店快送新增12城,一年内不收平台佣金

07-131527 浏览

营销日历 | 12月营销热点来了,寻找你的营销爆款密码

11-205712 浏览

快讯

查看更多

热门文章

阿里上线“绘蛙”,大厂开卷AI电商,风口还是噱头?

03-04

盒马“掀牌桌”的第146天

03-07

产品经理不能过于理想化

03-12

建设业务指标体系,落实精细经营

03-11

价值曲线,产品经理需要知道的秘密武器

03-08

年赚1万和年赚3亿的自媒体人,是如何拉开差距的?

03-11

文章导航

什么是token

身份认证概述

基于token机制的身份认证

总结

关于

人人都是产品经理(woshipm.com)是以产品经理、运营为核心的学习、交流、分享平台,集媒体、培训、社群为一体,全方位服务产品人和运营人,成立12年举办在线讲座1000+期,线下分享会500+场,产品经理大会、运营大会50+场,覆盖北上广深杭成都等20个城市,在行业有较高的影响力和知名度。平台聚集了众多BAT美团京东滴滴360小米网易等知名互联网公司产品总监和运营总监,他们在这里与你一起成长。

合作伙伴

链接

隐私政策

投稿须知

意见反馈

帮助中心

公众号

视频号

友情链接

PM265

产品经理导航

起点课堂

猪八戒网

人才热线

伙伴云表格

网易易盾

个推

友盟+

粮仓

创业邦

每日报告

鸟哥笔记

慕课网

旗下品牌: 起点课堂 | 运营派 | 粮仓企微管家

©2010-2024 - 人人都是产品经理 - 粤ICP备14037330号-粤公网安备 44030502001309号

广播电视节目制作经营许可证(粤)字第03109号 版权所有 © 深圳聚力创想信息科技有限公司

什么是登录Token-CSDN博客

>

什么是登录Token-CSDN博客

什么是登录Token

最新推荐文章于 2024-03-07 11:12:40 发布

尼古拉斯.李纳斯

最新推荐文章于 2024-03-07 11:12:40 发布

阅读量3.2k

收藏

12

点赞数

3

文章标签:

java

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/fsadkljhfweidfne/article/details/109645496

版权

什么是登录Token

什么是登录token

什么是登录token

token这个词翻译过来就是‘代替物’的意思 Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。这是最普遍的登录认证

当客户端向服务端发送请求时,服务端并不知道请求是谁发起的,为了标识请求的所属用户,客户端发送请求的时候会带上用户信息 user/login?userName=admin&password=123456

不安全,密码容易泄露,于是就有了以token为基础的认证方案

使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。流程是这样的: 1.用户携带账号密码发送登录请求 2.客户端拿到账号密码,进行验证 3.验证成功,生成token,发送至客户端 4.客户端拿到服务端发送的token进行保存 5.后续客户端在请求资源的时候,都带上token 6.服务端校验token,校验成功就向客户端返回请求数据 服务端就能通过token进行解密拿到用户信息

优惠劵

尼古拉斯.李纳斯

关注

关注

3

点赞

12

收藏

觉得还不错?

一键收藏

知道了

2

评论

什么是登录Token

什么是登录Token什么是登录token什么是登录tokentoken这个词翻译过来就是‘代替物’的意思Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。这是最普遍的登录认证当客户端向服务端发送请求时,服务端并不知道请求是谁发起的,为了标识请求的所属用户,客户端发送请求的时候会带上用户信息user/login?userName=admin

复制链接

扫一扫

后台用户登录-Token模块

12-22

后台用户登录-Token模块

Token登录认证

.

08-15

4355

Token,也称为“令牌”,是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。而且只要token设计的足够复杂,除非用户泄露,否则几乎没有被破解的可能,加上token是有时效的,在有限的时间加上有限的算力,更是无懈可击,这也类似于加密资产比如比特币钱包对应的私钥,安全性极高。另外Token可以有效减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

2 条评论

您还未登录,请先

登录

后发表或查看评论

微信小程序登录换取token

03-29

前言:

这次主要是介绍些业务逻辑,技术点倒是没有多少。不过在开发中,优秀的编程思路同样是非常值得学习的。

最近小程序可以说在开发届狠狠的火了一把。微信小程序可以开发游戏,腾讯率先带头,做出了一个跳一跳也是点爆朋友圈。所谓落后就要挨打,那么今天就开始学习小程序的一些小知识吧(本文基于十年磨一剑的tp5)

 

目录:

微信登录换取token的流程

如何将code变成openid和session_key

抛出错误异常和派发令牌

一:微信登录换取token的流程

多说无益,直接上图

(此图片来源于网络,如有侵权,请联系删除! )

这里介绍的主要是后端开发的流程,前端的不是本文介绍的重点

二:如何将co

Jmeter接口登录获取参数token报错问题解决方案

08-18

主要介绍了Jmeter接口登录获取参数token报错问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

Token 认证登录

qq_30436011的博客

11-04

4915

访问资源接口(API)时所需要的资源凭证简单token 的组成: uid(用户唯一的身份标识) 、time (当前时间的时间戳) ,sign(签名,token的前几位以hash算法压缩成的一定长度的16进制字符串)

token登录

lovecoding1的博客

05-14

1万+

token登录

nested exception is java.lang.NoClassDefFoundError: com/taotao/pojo/TbContentExample$Criteria] with

真正的大师永远怀着一颗学徒的心

06-05

768

java.lang.NoSuchMethodError

token实现登录功能(具体实现)

qq_64680177的博客

10-02

1683

具体的验证过程,使用服务端的秘钥和指定的加密算法(如HS256)对Header和Payload进行验证签名,得到一个签名结果。此时看这个签名结果和前端传过来的token中的签名是否一样,如果一样就说明这个token是有效,并不是伪造的,此时要进行判断这个token是否过期,这个行为我们可以再创建token时就将其放入的redis当中,并给它设置过期时间。用户在以后的请求中都要将token放入请求当中,服务端会验证Token的有效性,并根据Token中的信息来判断用户是否有权限发起这个请求。

Token验证登录状态的简单实现

weixin_40362806的博客

03-10

1713

Token验证登录状态的简单实现

简单登录功能(一)token的使用

m0_60467232的博客

11-08

4017

前端使用的layui,通过ajax异步提交表单来实现登录,刚好学习巩固一下ajax,后端主要学习一下token的使用。token是什么?百度百科:Token在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。为什么使用token?主要减轻服务器压力,用户登录生成一次token后,发送一份给客户端存放在localStorage或cookie中,请求时放在请求头携带。服务端token存放在哪?session:使用起来简单,分布式情况存在同步问题。

SpringBoot框架集成token实现登录校验功能

08-25

主要为大家详细介绍了SpringBoot框架集成token实现登录校验功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

APP 登录token值

08-15

APP登录时产生token值,存在Redis中,数据库MySQL,maven,Redis需要自己配置非常简单,有注解,特别菜的,就别下载了,你不会用,技术牛逼也绕开,适合初级程序员

10.用户登录——什么是token、生成token、token获取用户信息免密登录、登录装饰器

m0_63953077的博客

11-10

2981

什么是token、生成token、token获取用户信息免密登录、登录装饰器

token登录的实现

Go_ahead_forever的博客

09-21

898

使用令牌(Token)进行身份验证和授权是一种常见的方式,特别适用于分布式和跨域请求的应用程序。1. 为什么要使用 Token:2. Token 使用逻辑:

定义一个获取用户信息的其他接口

创建拦截器:

注册拦截器:

使用结果截图

结果返回了一个token,这个token前端拿到以后要保存到sessionStorage或者LocalStorage里面,再把这个token送到请求头中,就可以啦设置请求头设置Authorization

然后发起就可以得到啦

如果没有authorization就是得到未登

Token登录认证详解

热门推荐

tc979907461的博客

05-25

2万+

参考文章:

Token 认证的来龙去脉

前后端分离使用 Token 登录解决方案

理解Cookie和Session机制

基于 Cookie/Session 的认证方案

Cookie

Cookie的工作原理

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是。

cookie指的就是在浏览器里面存储的一种数据,仅仅是浏览器实现的一种数据存储功能。

cooki

基于 Cookie/Session 的认证方案

Tatooine

04-29

980

基于 Cookie/Session 的认证方案

Cookie

Cookie 的工作原理

由于 HTTP 是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是。cookie 指的就是在浏览器里面存储的一种数据,仅仅是浏览器实现的一种数据存储功能。cookie 的保存时间,可以自己在程序中设置。如果没有设置保存时间,应该是一关闭浏览器,cookie 就自动消失。

Cookie 实

token登陆验证

qq_20786911的博客

03-07

1万+

登陆业务的实现

由于http是无状态的,那么应该如何记住登录状态呢?

单一应用的服务中常见做法是在客户端cookie中保存sessionId,服务器端的session中保存sessionid,每次客户端发送请求的时候都带上sessionid,在服务器端进行验证。

在分布式系统中,由于服务器之间不能共享内存,因此服务器之间session不能互通,因此不能使用session去存储用户的登录信息,一般使...

SpringBoot+JWT实现登陆token验证并存储用户信息

Jul_C18672868641的博客

02-10

2741

/用来跳过验证的PassToken @Target({@Data @ApiModel("返回结果") public class R < T > {/*** 错误码*/ @ApiModelProperty("错误码") private Integer code;/*** 错误消息*/ @ApiModelProperty("错误消息") private String msg;/*** 内容*/ @ApiModelProperty("内容") private T data;

Java的 Map以及实现一个简单的红黑树

最新发布

好看的皮囊千篇一律,有趣的灵魂万里挑一。

03-07

1522

Map是将键映射到值的对象。map**不能包含重复的键**; 每个键最多只能映射到一个值。这个接口取代了Dictionary类,Dictionary类是一个完全抽象的类,而不是接口。

Map接口提供了三个集合视图,它们允许将映射的内容视为一组键、一组值或一组键-值映射。映射的顺序定义为映射集合视图上的迭代器返回其元素的顺序。一些类似实现,比如TreeMap类,对它们的顺序做出了特定的保证;其他类,如HashMap类,则不需要。

注意:如果使用可变对象作为映射键,必须非常小心。如果对象的值以影响相等比较的

用户登录 token

08-20

用户登录 token 是一种用于身份验证和授权的令牌。当用户成功登录后,服务器会生成一个唯一的 token,并将其返回给客户端。客户端在后续的请求中可以使用该 token 来证明自己的身份,以获取相应的资源或执行特定的...

“相关推荐”对你有帮助么?

非常没帮助

没帮助

一般

有帮助

非常有帮助

提交

尼古拉斯.李纳斯

CSDN认证博客专家

CSDN认证企业博客

码龄4年

暂无认证

7

原创

104万+

周排名

93万+

总排名

1万+

访问

等级

108

积分

9

粉丝

15

获赞

13

评论

80

收藏

私信

关注

热门文章

java实现微信扫码登录功能

5111

什么是登录Token

3293

SpringBoot整合SSM实现增删改查

897

SpringBoot实现登录拦截器

425

Spring Security用户认证和权限控制

395

最新评论

什么是登录Token

李先来贰:

点赞,思路非常清晰

java实现微信扫码登录功能

qq_46951064:

请问找到了吗

java实现微信扫码登录功能

我的钱包空指针了:

hutool工具或者jdkcommon包都有现成的工具类

什么是登录Token

求道玉(●'◡'●):

简洁易懂

java实现微信扫码登录功能

小框:

你找到这个工具类了吗

您愿意向朋友推荐“博客详情页”吗?

强烈不推荐

不推荐

一般般

推荐

强烈推荐

提交

最新文章

Spring Security用户认证和权限控制

SpringBoot整合SSM实现增删改查

创建第一个SpringBoot项目

2020年7篇

目录

目录

最新文章

Spring Security用户认证和权限控制

SpringBoot整合SSM实现增删改查

创建第一个SpringBoot项目

2020年7篇

目录

评论 2

被折叠的  条评论

为什么被折叠?

到【灌水乐园】发言

查看更多评论

添加红包

祝福语

请填写红包祝福语或标题

红包数量

红包个数最小为10个

红包总金额

红包金额最低5元

余额支付

当前余额3.43元

前往充值 >

需支付:10.00元

取消

确定

下一步

知道了

成就一亿技术人!

领取后你会自动成为博主和红包主的粉丝

规则

hope_wisdom 发出的红包

实付元

使用余额支付

点击重新获取

扫码支付

钱包余额

0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值