JWT的数字签名的简单理解

2023-05-16

一、JWT概念

        json web token

二、JWT与原始token的区别

      JWT是对原始security的oauth2 token的增强。

      原始的token只是一个uuid,没有任何意义。

      JWT包含了部分业务信息,减少了token验证等交互操作,效率更高。

三、JWT的特点

  • 自包含:包含有意义的信息。但由于其信息能被公开看到,所以jwt并不能放特别敏感的业务信息。
  • 含有签名:防止jwt自身被修改
  • 可扩展:可自定信息

三、JWT的签名

      JWT是如何做到防止内容被篡改? 答案就是数字签名。

      JWT内容是由三部分组成:Header、PayLoad、Signature。

              Header里存的是:token类型和加密算法,此处的加密算法是签名的加密算法

              PayLoad里面存的是:具体的业务数据比如用户id等等

              Signature:具体的数字签名密文信息

 

 

     举个例子,jwt内容如下:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImp0aSI6IjMyMWU1MzlmLTJmY2MtNDcwNy05YWMyLTI1ZmY5MTkzZTI4ZiIsImlhdCI6MTU3MTc5ODgwNiwiZXhwIjoxNTcxODAyNDA2fQ.3pNLP8HvSu5hKFATOeJIR1Tpo5hxDB4Pcz6mK1lsTFU

    其内容由三个“.”隔开,由base64编码,分别对应的就是header、payload、signature。

    通常我们使用jwt时候采用RS256 私钥/公钥 方式进行签名的 加密/解密,因为RS256是非对称加密,比较安全。

    因为jwt是由服务端生成并发放的,其中签名是由服务端的私钥加密而成的,只要保证了私钥的安全,就能保证签名是安全的。

    当别人拿着jwt访问我们的服务时,可以有两种验证方式:

          (1)我们服务端拿到header和payload的信息,通过header里的加密算法拿着我们自己的私钥对payload生成一个签名对比jwt传过来的签名,如果签名一致,说明payload的信息没有被修改。

          (2)我们利用公钥对签名解密,解密出来的header和payload的信息是否和传过来的一致。

 

-------------------------------------------------------------------------------------------------------------------------------

以上为我的理解,以后接着补充,如有错误,欢迎指正。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JWT的数字签名的简单理解 的相关文章

  • 使用 Spring boot 和 JWT 保护 REST Api

    我正在尝试使用以下方法来保护我的 REST 服务器JWT我已经实现了自己的 这意味着 JWT 中没有 spring 的东西可以自行处理 其他一切都是Spring当然 我有这门课 JWTToken implements Authenticat
  • import jwt 导入错误:没有名为 jwt 的模块

    我一直在尝试运行这个项目https github com udacity FSND Deploy Flask App to Kubernetes Using EKS https github com udacity FSND Deploy
  • 使用 JWT 刷新令牌如何安全?

    据我了解 您可以缩短 JWT 访问令牌的生命周期 这样如果有人可以访问它 它就不会长期工作 但是 我们不会对 JWT 刷新令牌执行相同的操作来增强用户体验 但现在 如果有人可以访问我的 JWT 刷新令牌 这将授予他们访问受保护资源的权限 那
  • 使用 Jest 模拟 jsonwebtoken 模块

    我尝试用玩笑来模拟 npm 模块 jsonwebtoken 的验证功能 该函数返回一个已解码的令牌 但我想将此函数的自定义返回传递给我的单元测试 我明确请求在继续请求之前检查访问令牌的有效性 但我想模拟令牌检查的时刻以直接返回用户值 并且轻
  • Firebase JWT:签名验证失败

    我尝试在 Firebase 中使用 JWT 身份验证 但总是收到此错误 致命错误 未捕获的 Firebase JWT SignatureInvalidException 签名验证失败 代码是这样的 key test tokenId base
  • 在 python 中使用 PyJWT 解码 jwt 令牌给出错误 算法不支持

    我正在使用 PyJWT 解码来自 keycloak 的 JWT 令牌 eyJhbGciOiJSUzI1NiIsInR5cCIGOiAiSldUIiwia2lkIiA6ICJ6MWpiUExrTndMVTBkTHk3a0NIT1pyS2FJd
  • 在 Java 中创建 JSON Web 令牌

    我正在尝试创建一个 JSON Web 令牌 以便使用它通过 Google Analytics API 访问进行刷新令牌调用 我采取了服务帐户方法 根据这种方法 我需要 创建服务帐户 添加使用 Google Analytics 帐户为 Ana
  • 无状态 Spring JWT 应用程序 + EnableOAuth2Client

    我在这个解决方案上花费了 50 多个小时 非常感谢您的任何意见 我有一个使用 Angular Spring JWT 无状态身份验证 myApp 的 JHipster 4 x 生成的应用程序 我正在将经过身份验证的 myApp 用户的第 3
  • 填充 AspNetUserLogins 和 AspNetUserTokens

    我已经尝试了很多来自互联网的例子 例如first https stackoverflow com a 45901894 2725524 second https logcorner com token based authenticatio
  • AAD 团体声称某些用户的 JWT 令牌缺失

    我在 AAD 上遇到一些奇怪的行为 用户成功登录后 我们的 API 调用中某些用户收到未经授权的消息 结果发现 JWT 中的声明丢失了 一些用户获得 groups 声明 他所属的所有 groupId 的数组 一些用户获得 hasgroups
  • 无法使用 RS256 验证 JWT - 算法无效

    我正在尝试将 JWT Auth 从秘密短语移至 RS256 这是示例代码 import fs from fs import jwt from jsonwebtoken const private key fs readFileSync pr
  • JWT 身份验证:使用 UI 令牌来验证 Graphene/Django (GraphQL) 查询?

    我正在开发一个具有以下架构的项目 UI 通过 Node 服务器 GraphQL 的 Apollo 客户端对客户端和服务器端渲染进行反应 API Django 通过 Graphene 处理 GraphQL 查询 我使用 Auth0 基于 JW
  • 使用 JWT 缺少授权标头

    我正在尝试设置 JSON Web 令牌以从移动应用程序与我的 php 后端进行通信 我可以请求一个令牌就好了 当我需要验证它 或向另一个端点发出请求 时 我使用以下格式设置授权标头 Bearer
  • 从 Google Chat POST 请求验证 JWT

    我有一个 NodeJS 机器人使用 HTTPs 端点连接到 Google Chat 我正在使用快递来接收请求 我需要验证所有请求是否都来自 Google 并且希望使用 Google 随请求发送的不记名令牌来执行此操作 我的问题是我正在努力寻
  • Spring Security OAuth2 JWT 中的 JWE

    是否可以将 JSON Web 加密 JWE 与 Spring Security OAuth2 JWT 一起使用 现在我有一个追随者JwtAccessTokenConverter Bean public JwtAccessTokenConve
  • 如何在 SoapUI 中测试使用 JWT 的 REST 服务?

    我正在实施一些 REST 服务 我所有的测试都是使用 SoapUI 进行的 最近 我决定采用 JSON Web Token JWT 进行身份验证 但我在 SoapUI 上找不到对此的任何支持 本机安装或插件 什么也没有 我发现了一些在线生成
  • 如何在 PHP 中使用 RS256 签署 X.509 证书?无法获取有效指纹...x5t

    我已经实现了 JWT 令牌生成器库Here https github com F21 jwt blob master JWT JWT php 并且我能够获得 RS256 令牌 有效负载 但我对标题数据有疑问 我需要一个标头值 x5t 该标头
  • 如何从秘密字符串中制作 HMAC_SHA256 密钥以在 jose4j 中与 JWT 一起使用?

    我想生成 JWT 并使用 HMAC SHA256 对其进行签名 对于该任务我必须使用jose4j https bitbucket org b c jose4j wiki Home 我尝试根据秘密生成密钥 SecretKeySpec key
  • 如何从 JWT 令牌中提取声明

    我正在使用 dgrijalva jwt go 包 我想从令牌中提取有效负载 但找不到方法 示例 取自 https jwt io https jwt io 对于编码 eyJhbGciOiJIUZI1NiIsInR5cCI6IkpXVCJ9 e
  • JWT - 配置授权服务器并将颁发者设置为其本身

    我正在尝试按照本指南设置授权服务器 http bitoftech net 2014 10 27 json web token asp net web api 2 jwt owin authorization server http bito

随机推荐