身份验证通常用来验证某人或某事是否如它所说的那样是谁或者是什么。
身份验证技术通过测试查看用户的凭据是否与经过身份验证的用户数据库或服务器中的凭据相匹配,从而提供设备访问控制。
基于token的身份验证的工作原理是,确保每个到服务器的请求后面都有一个签名的令牌,服务器验证该令牌的有效性,然后才响应请求。
token是一段本身没有什么意义或用途的数据,但它根据正确的令牌化方法,在保护应用程序方面发挥了关键作用。

为什么用token而不是传统方式?

  • 令牌是无状态的:令牌是自包含的,包括所需的所有身份验证信息。对于可伸缩性,这是完美的,因为它使您的服务器不必存储会话状态
  • 令牌可以从任何地方生成:令牌的生成与令牌身份验证解耦,允许您在单独的服务器上管理令牌签名,甚至通过另一家公司(如Auth0)
  • 细粒度访问控制:您可以轻松地在令牌有效负载(payload)中定义用户角色和权限,以及用户可以访问的服务

有很多相关技术,但主要是两种:

  1. JWT: Json Web Tokens
  2. Opaque Tokens

让我们学习一下这些令牌是什么,以及在不同情况下做出不同的技术选择。

1.JWT(Json Web Tokens)

实际上,JWT令牌是一个完整的JSON对象,使用base64编码,然后使用对称共享密钥或公共/私有密钥对签名。不同之处在于,如果您的客户需要验证令牌是否已签名,但不允许该客户生成令牌,那么您可以向该客户提供不能生成但仍然验证令牌的公钥。
JWT由三个部分组成: HeaderPayloadSignature
报头和有效负载由Base64编码,然后按时间连接,最后以算法方式对结果进行签名,以header.claims.signature的形式创建一个令牌。报头由用于对令牌进行签名的元数据组成,包括令牌形式和散列算法。有效负载包括关于令牌编码的语句的信息。
看这个JWT:header.claims.signature

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
.eyJtZXNzYWdlIjoiSldUIFJ1bGVzISIsImlhdCI6MTQ1OTQ0ODExOSwiZXhwIjoxNDU5NDU0NTE5fQ
.-yIVBD5b73C75osbmwwshQNRC7frWUYrqaTjTpza2y4

JWT的优点:
它们可以在没有备用商店的情况下使用。令牌本身内部是验证用户所需的所有信息。它使得在分布式微服务环境中很容易不依赖集中的身份验证服务器和数据库。为了处理令牌的验证,单个微服务只需要一些中间件(JWT库对从Express到JVM MVC框架的任何东西都是公开访问的)和验证所需的密钥。
JWT的缺点:

  • jwt的一个缺点是,如果您需要立即执行操作,那么阻止用户或添加/删除角色会比较困难。要知道,JWT有一个预定义的过期日期,可以设置为未来一周。由于令牌存储在客户端,即使您在数据库中将用户标记为禁用,也没有办法直接使令牌无效。相反,您必须等待它过期。特别是,在开发公共API时,这可能会影响体系结构,而单个高级用户或重要的电子商务应用程序可能无法满足这种需求。
  • 另一方面,如果你有一个包含多个职位的企业应用,比如管理员、项目所有者、服务客户经理,你想要立即产生影响,那么创建它可能会很棘手。特别是,考虑这样一种情况:管理员正在更改其他人(例如他/她的直接报告)的授权角色。因此,如果不刷新JWT,更新后的用户甚至不会意识到他/她的角色发生了变化。
  • 第二个缺点是,随着添加更多字段,令牌将扩展。在无状态应用程序中,令牌几乎对每个请求都发送,因此可能会对数据流量大小产生影响。例如,我们前面提到的企业应用程序可能有几个功能,这可能会增加要存储在令牌中的内容的膨胀和复杂性。考虑设计用于备份AWS或Azure的Web门户的api。对于每个用户的每个资源,您都有目标权限。

2.Opaque Tokens

正如我在前面所解释的,JWT具有可读的内容。每个人都可以解码token并读取其中的信息。另一方面,不透明令牌具有您不打算读取的格式。只有颁发者知道格式。
从字面上看,不透明令牌就像它们听起来那样。不透明令牌只是一个主键,它引用具有数据的数据库条目,而不是在令牌中存储用户标识和声明。像Redis这样的快速键值存储对于利用O(1)搜索payload的内存哈希表来说是完美的。由于角色是直接从数据库中读取的,所以可以修改角色,只要将修改传播到后端,用户就可以看到新的角色。

在Auth0的情况下,不透明令牌可以与/userinfo端点一起使用,以返回用户的配置文件。
如果你收到一个不透明的访问令牌,你不需要验证它。您可以将它与/userinfo端点一起使用,剩下的工作由Auth0负责。不透明的JWT刷新令牌是一个矛盾。这里的实际意思是,在一些JWT框架中,只有身份验证令牌是JWT,但作为刷新令牌,它们使用不透明令牌。

JSON Web Token(JWT)对比Opaque Token相关推荐

  1. 登录授权方案:JSON Web Tokens (JWT)

    登录授权方案:JSON Web Tokens (JWT) JWT官方文档:https://jwt.io/introduction 1.简介: JWT 即 json web tokens,通过JSON形 ...

  2. JSON Web Token (JWT)笔记(token实现单点登录功能)

    文章目录 前情提要 cookie(储存在用户本地终端上的数据) Cookie特点: session(web服务端内存) cookie和session 单点登录(只登录一次,可使用账号下全部服务)三种方 ...

  3. JSON Web Tokens(JWT)

    现在API越来越流行,如何安全保护这些API? JSON Web Tokens(JWT)能提供基于JSON格式的安全认证.它有以下特点: JWT是跨不同语言的,JWT可以在 .NET, Python, ...

  4. ThinkPHP6+JWT 中间件校验Token时效性

    一.涉及到的知识点 接口验签安全机制封装到服务层 接口调用须使用验签 接口验证封装到中间件 二.下载ThinkPHP6.0框架 如果你是第一次安装的话,在命令行下面,切换到你的WEB根目录下面并执行下 ...

  5. 如何使用json开发web_如何通过使用JSON Web令牌简化应用程序的身份验证

    如何使用json开发web by Sudheesh Shetty 由Sudheesh Shetty 如何通过使用JSON Web令牌简化应用程序的身份验证 (How to simplify your ...

  6. RFC7515- JSON Web Signature (JWS)(JSON Web签名)

    RFC7515- JSON Web Signature (JWS) 目录 摘要(Abstract) 1. 简介(Introduction) 1.1 符号约定(Notational Convention ...

  7. 无效的JSON Web令牌

    本文翻译自:Invalidating JSON Web Tokens For a new node.js project I'm working on, I'm thinking about swit ...

  8. JWT(JSON Web Token)简介及实现

    JWT(JSON Web Token):是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为Json对象安全地传输信息.由于此信息是经过数字签名的,因此可以被验证和信 ...

  9. SpringBoot 2.x 使用 JWT(JSON Web Token)

    一.跨域认证遇到的问题 由于多终端的出现,很多的站点通过 web api restful 的形式对外提供服务,采用了前后端分离模式进行开发,因而在身份验证的方式上可能与传统的基于 cookie 的 S ...

最新文章

  1. LightTools( 32-64) 8.4.0下载与安装方法,lighttools免费版,lighttools(光学建模软件)【亲测有效】
  2. python语法面试题_Python语法面试题
  3. 《剑指offer》— JavaScript(24)二叉树中和为某一值的路径
  4. linux达人养成计划学习笔记(四)—— 压缩命令
  5. c语言返回一个数的任意倍数,几道基础C语言题
  6. VTK:几何对象之ParametricSuperToroid
  7. android第五天晚:surfaceView
  8. 问题五十九:怎么求一元六次方程在区间内的所有不相等的实根(3)——修正一个问题
  9. 汇编中add和inc的问题
  10. C#操作Access数据库(查询,更新,插入)
  11. 这里是一个简单的CRM客户关系管理系统的开发教程,你值得拥有哟!
  12. matlab绘制一般计算时间函数的曲线
  13. android自定义吸顶,Android ScrollView+ViewPager 固定顶部控件,自动吸顶效果
  14. 【深度学习环境搭建<三>】Ubuntu 中Anaconda + Pycharm 开发环境安装
  15. 君莫笑系列视频学习(4)
  16. 区块链与ICO,了解一下
  17. Vue+Element实现tab页多页面切换
  18. linux开源炫酷命令行工具,Linux上超酷的命令行扩展工具Oh My Zsh
  19. C#查找Excel重复值(多列)
  20. 用c语言做一个五子棋程序,C语言制作简单五子棋游戏

热门文章

  1. 记忆集(Remember Set)和卡表(Card Table)
  2. 嵌入式linux软件平台--ROM Code
  3. 全局替换字体的 4 种方式
  4. 大学生python实验心得体会_大学生实验心得
  5. 2022-2028年中国干细胞美容行业市场深度分析及投资前景分析报告
  6. 制作PPT的软件有哪些
  7. Redis:只刷面试题,怎可能进大厂,多理解原理!(Redis的 集群)
  8. selenium---浏览器操作方法
  9. 软件测试技术课后习题:第2章软件测试基本概念-广东高等教育出版社,主编杨胜利
  10. 淘宝私域运营如何操作?