在 RESTful API 环境中,使用 RSA 签署 JWT 相对于 SHA 有什么优势?

2023-12-24

我有一个公开 RESTful API 的后端,该 API 目前“对所有人免费”(但使用 https)。

我现在想添加 RBAC(基于角色的访问控制),而 JWT 似乎是可行的方法,我阅读了很多有关 JWT 的内容,但没有看到使用 RSA 相对于 SHA 来签署令牌的优势。

假设用户已通过身份验证并获得密钥,无论是共享密钥还是公共/私有密钥。

现在,在我看来,在这两种情况下 - SHA 或 RSA HMAC - 双方(客户端和服务器)都必须拥有共享密钥,或者在 RSA 的情况下拥有各自的一半私钥/公钥。服务器必须根据 JWT 中的声明找到该密钥(在表或数据库中),以便验证令牌的签名。一旦在 JWT 中确认了声称的用户,它将使用配置的角色授权请求。

那么RSA在这种场景下有什么优势呢?


我假设您在这里讨论的是 RSxxx(例如 RSA256)和 HSxxx(例如 HS256 (HMAC-SHA256))算法。主要区别在于HS256是对称算法,而RS256是非对称算法。对称算法仅使用一个密钥(或秘密)进行签名和验证,而非对称算法使用私钥进行签名并使用公钥来验证令牌。

如果您共享用于 HS256 的秘密,那么知道该秘密的每个人都可以发布或修改并重新签署令牌。如果您与客户共享秘密,那么签名的目的就会失效。在 RS256 或任何其他非对称算法的情况下,只有身份验证服务器知道私钥,任何需要验证令牌的人都可以使用公钥来执行此操作。匹配的密钥通常由KID(Key Id) 令牌标头中的声明。

但通常情况下,签名和验证仅在服务器端完成,客户端不需要验证令牌,因此根本不需要知道密钥或秘密。因此,在简单服务的情况下,当身份验证和资源服务器相同时,您仍然可以依赖对称算法。但是,一旦您为多个资源服务器配备了一台单独的身份验证服务器,就应该使用非对称算法。

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

在 RESTful API 环境中,使用 RSA 签署 JWT 相对于 SHA 有什么优势? 的相关文章

随机推荐

  • MySQL 查询大数据时速度非常慢

    我不是 MySQL 高手 但我明白了 我刚刚继承了一个相当大的表 600 000 行和大约 90 列 请杀了我 并且我创建了一个较小的表来将其链接到类别表 我正在尝试使用左连接查询所述表 因此我在一个对象中拥有两组数据 但它运行速度非常慢
  • 删除neo4j 1.8中的所有节点和关系

    我知道这个问题已经被很多人问过为了我的研究 这里有一些之前问过的问题 如何删除neo4j图中的所有关系 https stackoverflow com questions 12899538 how to delete all relatio
  • 400 错误请求:未知字段“类型”

    我已经按照描述在 Tomcat 上设置了 Solr 3 6 2here http wiki apache org solr SolrTomcat 使用 sunspot rails gem 和嵌入式 solr 服务器我没有任何问题 但在我的临
  • null + true 怎么是字符串?

    Since true不是字符串类型 怎么办null true一个字符串 string s true Cannot implicitly convert type bool to string bool b null true Cannot
  • %g printf 说明符到底是什么意思?

    The g说明符的行为似乎与大多数来源记录的行为方式不同 根据我发现的大多数来源 在使用的多种语言中printf指定者 g说明符应该等同于 f or e 对于所提供的值 哪个会产生更短的输出 例如 在写这个问题时 cplusplus com
  • Tortoisesvn隐藏svn文件夹

    当我需要将网络解决方案上传到服务器时 它们特别烦人 有没有办法配置 SVN 在我的工作目录之外创建 svn 文件夹 如果没有 当您只需要复制代码时处理它们的最佳方法是什么 Update 使用 svn导出 命令是有问题的 因为有些文件不受源代
  • 发布的 asp.net 站点返回解决方案

    我在服务器上有一个已发布的 asp net 网站 我需要将其返回到解决方案中进行编辑等 是否有任何工具可以为我提供解决方案 Ilspy http ilspy net 没有为我这样做 提前致谢 您应该寻找 Net 反编译工具 NET Fram
  • PerformSegueWithIdentifier 的调用顺序

    当我打电话时performSegueWithIdentifier 我压倒一切prepareForSegue 之后为了在我的目标视图控制器上设置一些属性 但是 我试图了解此处的操作顺序以确保其安全 我使用以下方法实例化目标视图控制器 MyVi
  • Android - 防止人们改变音量

    如果可能的话 如何才能使只要打开应用程序 就不允许用户更改设备的音量 我发现您可以使用 AudioManger 将音量设置为静音 AudioManager volumeControl AudioManager getSystemServic
  • 如何在 jQuery 数据表中导出多行标题?

    嗨 我正在使用 jQuery数据表 https datatables net1 10 我正在尝试导出数据表多个标题行 但没有得到 但它仅导出第二个标题行 我正在使用按钮 buttons extend excel header true ex
  • 从目录结构创建数组

    我需要迭代目录结构并将其推送到具有特殊结构的数组 所以我有下一个目录结构 pre collection buildings greece 1 php 2 php rome 1 php pre
  • 如何创建 Chrome 扩展程序来搜索源文本并更改格式

    我是新来的 我想知道是否有人可以帮助我指出正确的方向 我希望创建一个 Chrome 扩展程序 在页面中搜索多个不同的字符串 例如 410 或 1040 不带引号 并突出显示这些字符串 以便更容易看到 为了进一步解释为什么我需要这个 我经常与
  • Tomcat Websocket 禁用主机名验证

    我试图禁用 tomcat websocket 实现的主机名验证 但我没有找到任何示例 我已经能够禁用证书验证 WebSocketContainer container ContainerProvider getWebSocketContai
  • 创建条形图但无法从 CSV 文件获取值出现错误 NaN

    使用 D3 创建条形图并从同一文件夹中的 csv 文件获取值 但在控制台上出现 15NaN 等错误 下面是我的代码 define margin followed by height width for svg define margin v
  • get 已弃用:从 v4.0.0 开始使用 Type 或 InjectionToken

    切换到 Angular 5 2 3 并运行后ng cli的 linter 规则为 deprecation true我在许多测试中遇到以下错误 get is deprecated from v4 0 0 use Type
  • 创建路径长度超过 260 个字符的目录

    有没有办法创建一个路径长度超过 260 个字符的目录 我正在使用 powershell 我的代码是 io Directory CreateDirectory fileshare FolderStructure 但当路径长度超过 260 个字
  • 如何在Android 4.2模拟器中添加小部件?

    我最近下载了 Android SDK 并在模拟器上运行 Android 4 2 但是 我在主屏幕上看不到任何添加小部件的选项 我什至无法添加默认小部件 我记得在 Android 2 2 上 长按屏幕会弹出一个上下文菜单 其中会提供添加小部件
  • 如何在javascript中监听表单提交事件?

    我想编写自己的表单验证 javascript 库 我一直在谷歌上寻找如何检测是否单击了提交按钮 但我发现的只是您必须使用 onClick 的代码onSubmit function 在 HTML 中 我想制作这个 javascript 这样我
  • R中的递归for循环

    我正在努力编写这个递归程序 想知道是否有人可以提供帮助 我想编写这个递归方程 for k 1 2 beta k k sum i 0 k 1 Kchoosei beta i exp i k i 我已经在 R 中以手动方式完成了它 但想将其放入
  • 在 RESTful API 环境中,使用 RSA 签署 JWT 相对于 SHA 有什么优势?

    我有一个公开 RESTful API 的后端 该 API 目前 对所有人免费 但使用 https 我现在想添加 RBAC 基于角色的访问控制 而 JWT 似乎是可行的方法 我阅读了很多有关 JWT 的内容 但没有看到使用 RSA 相对于 S