我无法清楚地掌握 JWT
的工作原理,尤其是签名部分。
客户端提交正确的用户名和密码后,身份验证服务器将创建一个由标头、有效负载/声明和签名组成的 JWT
令牌。
问题 1 - 签名是不是只有身份验证服务器知道的密钥(不是用户的密码)(有点像服务器的私钥)?
问题 2 - 假设我正在使用单独的应用程序服务器和身份验证服务器,在从客户端接收 JWT 时,应用程序服务器是否会将 JWT
发送到身份验证服务器以进行验证?我想应用程序服务器无法验证
JWT
令牌,因为它不知道用于对标头和有效负载进行签名的密钥。
问题 3 - 我拿了以下 JWT
并将其粘贴到 jwt.io
上。我看到消息“签名已验证
”。jwt.io 怎么知道签名是正确的,因为它不知道密钥。
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxLS9tSjVsVTNYc09QWCt2VitpaGZRMWlCUDVjUTROQm1hNDluOE9rS1FFSnEzTDFNOTl2VW9iQ1ZLUHVYMmdlWWhYaHJQM0t3bHY4SE1RaHNGdnFjbllIeGxGSHM9IiwiaXNzIjoicGxheS1zaWxob3VldHRlIiwiZXhwIjoxNTI2MjgxMDU1LCJpYXQiOjE1MjYyMzc4NTUsImp0aSI6IjhmOGM3YTVmYWRkNTE5MjUxNzQ5NGE4N2Q1ODcxZjJjZGUxZDkzMDdkOTY1MThjNjg2NzExOTc1YjU3M2I5NDBlZWU2NGY0NDUwYzcxODI3NGZmNzU1MmE2Y2JlNTVmZmZhMWI1ZjA3ZWZlOWVkNTE0Y2Y4YTViOTZlM2ExYjI0ODRmYTI5NjZiYjA0ODlmODIwZjMyMzM5YWVhNjM3NWRkZmU4ZDE4N2E2NzBjMzg0ODgwZGIyMzQ1ZTFkMzRkYWNjZmY2MTdkMDY1NzU3YmEwZTQzNDg4YWFhZmZmNDNjYWZlZGY0OTFlODU1YTA0NWM0NmJjNDY4NGYzODlmY2YifQ.GwN6TSNd426xpc3Y02eRXHbrmSr_61MMBqrmx66Ofqs
签名只是使用身份验证服务器生成的密钥进行哈希处理,使用标头中指定的算法,标头,有效负载和密钥的组合
只有认证和/或应用程序服务器知道该密钥。JWT 已编码和签名,但未加密。要了解签名/哈希和加密之间的区别,请检查此内容
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
签名只是验证或验证消息在使用标头中指定的相同类型的算法之前是否已散列,该算法具有只有服务器知道的机密。
要了解它在身份验证中的工作原理,这里有一个流程:
我建议您阅读这篇更具描述性的文章,以更好地了解它的工作原理。
问题 1 - 签名是不是只有身份验证服务器知道的密钥(不是用户的密码)(有点像服务器的私钥)?
不,电子签名是使用密钥应用于 JWT 有效载荷的数学计算。目的是确保消息未被更改,并识别签名者以验证 JWT
问题 2 - 假设我正在使用单独的应用程序服务器和身份验证服务器,在从客户端接收 JWT 时,应用程序服务器是否会将 JWT 发送到身份验证服务器以进行验证?我想应用程序服务器无法验证 JWT 令牌,因为它不知道用于对标头和有效负载进行签名的密钥。
不一定。如果使用对称密钥 (HMAC),则签名和验证密钥相同。在这种情况下,授权服务器必须知道密钥或发送令牌进行验证。但是,如果使用非对称密钥(RSA、ECDSA),则签名密钥与验证密钥不同。授权服务器可以安全地拥有公钥的副本
问题 3 - 我拿了下面的 JWT 并将其粘贴到 jwt.io 上。我看到消息“签名已验证”。jwt.io 怎么知道签名是正确的,因为它不知道密钥。
jwt.io 或任何想要验证令牌的人都需要密钥。请注意,如果在 jwt.io 中复制并粘贴令牌,则不会验证签名,但如果更改密钥,编辑器会自动更改签名,此时创建一个新令牌
我有点困惑于认识到和包之间的差异。它们实际上通过令牌服务于相同的API身份验证目的吗?只要Laravel Pasport是在5.3中引入的,在最新版本中是否应该使用Pasport而不是包?
本文向大家介绍什么是康威定律?相关面试题,主要包含被问及什么是康威定律?时的应答技巧和注意事项,需要的朋友参考一下 “任何设计系统的组织(广泛定义)都将产生一种设计,其结构是组织通信结构的副本。” —— Mel Conway 该定律基本上试图传达这样一个事实:即为了使软件模块起作用,整个团队应该进行良好的沟通。因此系统的结构反映了产生它的组织的社会边界。
本文向大家介绍康威定律是什么?相关面试题,主要包含被问及康威定律是什么?时的应答技巧和注意事项,需要的朋友参考一下 康威定律指出,“设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构。” 面试官可能会问反微服务面试问题,比如康威定律与微服务的关系。一些松散耦合的api形成了微服务的体系结构。这种结构非常适合小团队实现自治组件的方式。这种体系结构使组织在重组其工作流程时更加灵活。
问题内容: 在jackson中使用的@JsonTypeInfo和@JsonSubTypes注释是什么? ======================================= ============================================== 我了解的是 ,它还保留了要序列化的对象的具体类型以及实际数据。 我不清楚 反序列化期间的实际优势/收益是什么。 除了Jav
主要内容:写在前面的话,人工智能应用,人工智能发展简史,机器学习&深度学习很早就想写一门关于 Python“机器学习”的教程,不过碍于自身知识的局限性,不知如何下手。如果写的教程通篇只是探讨代码、数学知识、算法原理,这样的教程读起来必然索然无味。经过冥思苦想,终于突发灵感,可不可以写一部关于“机器学习算法”的入门教程呢?让初学者更容易理解常用的机器学习算法,从而帮助那些想要了解机器学习的人,打开通往人工智能世界的大门。 写在前面的话 机器学习是一门涉及了大量逻辑与算法的
当swift使用时: O(n)其中,每次调用它时,我们都会遍历整个字符串以便对其进行计数 O(1),其中swift以前存储了这个数组的大小,并简单地访问它。
今天,我将Java版本从16更新到17,我发现密封类是其中的一个新特性。我认为可以这样宣布: 但是,Java中密封类的用途是什么? 我还知道这是jdk-15中的预览功能。
问题内容: 函数定义中的下划线是什么意思? 例如 我了解在定义函数时,我可以执行以下操作: 然后,我将其称为而不是,即故意隐藏参数名称吗? 问题答案: Swift需要一个约定来说明函数名称是什么,不仅包括函数名称本身(在括号之前),还包括参数的外部名称。约定是名称后跟冒号。因此,这是一个函数声明(在Swift 2.0中): 这是该函数的名称: 但是,在现实生活中,一个或多个参数有可能(实际上)不会