c# - 任何人都可以在没有 key 的情况下解码 JSON Web Token (JWT) 吗?

标签 c# jwt

我是这个领域的新手,但我试图使用 JWT nuget package 生成 JWT .

我的理解是你提供了一个 key 来签署 token ,但是当我得到 token 时我去了 JWT website对其进行测试,网站能够在我不提供 key 的情况下对其进行解码。

我认为您生成 token 然后对其进行签名,从而防止任何人知道 token 的内容,除非他们拥有该 key 。不是这样吗?

最佳答案

JSON Web Tokens 是数据结构的编码表示。不需要加密此编码数据,但这样做是可以接受的。

从代码签名的定义来看:

Code signing is the process of digitally signing executables and scripts to confirm the software author and guarantee that the code has not been altered or corrupted since it was signed by use of a cryptographic hash.

已加密的 JWT 通常有两个哈希值,第一个用于解密数据,第二个用于验证代码签名。解码未加密的 JWT 是一个标准化过程,即使未验证代码签名也可以完成。但是,如果代码签名哈希不匹配,建议不要在 JWT 中使用任何数据,因为这表明数据可能已被篡改。

并非所有 JWT 实现都支持加密;值得注意的是,Microsoft 的 JWT 实现中没有加密支持。 https://stackoverflow.com/a/18224381/2495283 .因此,如果您有必须确保保密的数据,您应该使用 JWE 加密数据。 . JWT 标准文档显示 an example of this process .数据首先被加密,然后加密的字符串和解码算法作为 JWT 的负载发送。

关于c# - 任何人都可以在没有 key 的情况下解码 JSON Web Token (JWT) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30517715/

相关文章:

c# - jquery 中的 if 语句不起作用

c# - 生成由 3 个不同的 "sub-arrays"组成的项目数组

jwt - 将使用 google 的 keycloak OIDC 登录限制到特定托管域

Django Rest 使用 JWT,获取 AttributeError : Invalid API setting: 'JWT_PAYLOAD_HANDLER'

c# - 我怎样才能制作一个列表列表

c# - 无法从组合框 C# 中删除项目

c# - C# 循环中捕获线程中的变量,解决方案是什么?

android - 如何使用 JWT 将报价保存到 Google 电子钱包?

javascript - 无法使用 JWT token 连接到 Apple App Store API

javascript - 为什么在页面转换时不调用 next-auth jwt 回调?