问题标签 [jwt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1129 浏览

node.js - Nodejs - 是否有必要解码身份验证令牌?

我在服务器端使用 Node.js 和 Passportjs 的组合,在客户端使用 Emberjs 的应用程序。我当前的身份验证策略是使用 Passport-Local 以标准的电子邮件/密码组合对用户进行身份验证,然后挂钩会话创建机制以生成身份验证令牌,将其保存到单独的表中,并传回给用户用于任何进一步受保护的路线。(在 REST 标头中传递)。

令牌的创建很好,我这样做没有问题,但是如果我需要额外的步骤,我正在努力解决。

目前,我使用node-jwt-simple生成令牌,方法是使用随机node-uuid传递作为有效负载,并将用户 UID(另一个node-uuid)作为秘密。然后我将其保存到$.cookie客户端的 a 和服务器端的表中,以及创建日期。

显然, node-jwt-simple中的步骤之一是对令牌进行编码。还提供了解码功能。我的问题是,当我进行身份验证检查时,是否需要将令牌解码为某种东西,或者只是检查用户的会话 cookie(REST 标头)是否与数据库中的令牌匹配就足够了?我不想付出所有努力来生成一个令牌,然后错过一个重要的步骤,但我没有看到如何将它解码成任何可以提供任何额外有用安全性的东西。

更新:

我想我昨晚解决了这个问题:

The solution seems to be to use the User's UID as the payload for JWT, with a static string as the secret (taken from something like a server environment variable or similar), and then only store the encoded token in the database. Pass the token back to the client for re-auth, then when the client attempts to access a protected route, they must pass their UID along with the encoded token to the server, which is then decoded, and the decoded payload compared to the UID that has been passed. If they match, the auth is successful, otherwise the token is destroyed and the user has to log in again. By doing this, it makes the store of tokens effectively useless without knowing either the Secret key, or having the User's UID, but makes the auth process more secure.

0 投票
2 回答
3065 浏览

node.js - NodeJS Crypto RS-SHA256 和 JWT 承载

在使用护照和 oauth2orize 实现 oauth2 堆栈时,在这种情况下,问题特别在于使用 oauth2orize jwt 承载。oauth2orize jwt 承载器非常适合让一切顺利进行,但是它的 RSA SHA 片段标记为要执行。

在尝试为 RSA SHA 加密处理添加片段时,我无法验证签名,因为 verifier.verify 似乎总是返回 false。如果有人清除了这个障碍,那么一点帮助将是超级的。

我所做的:创建了私钥/公钥:

现在要签名的数据:

我已经尝试了多种方法来对此进行签名,此处无法列出,但我对正确签名的理解是对这些项目的 bas64 编码进行签名,所以我在 {"alg":"RS256", {"iss": "myclient"} 上的 "typ":"JWT"} 和 base64 然后在这些编码上运行 base64。所以结果是: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9 eyJpc3MiOiAibXljbGllbnQifQ 然后编码:

这给了我: e2V5SmhiR2NpT2lKU1V6STFOaUlzSW5SNWNDSTZJa3BYVkNKOX0ue2V5SnBjM01pT2lBaWJYbGpiR2xsYm5RaWZRfQ

此时,我通过执行以下操作对上述 base64 进行签名:

然后我在其上运行 base64 以获取要传递到断言的签名部分的数据。然后我传入对象:

现在在我的代码库中:

但是,结果总是错误的。

我确实正确接收了数据,代码中的签名变量与我传入的内容相匹配,我总是收到 false 并且已经用尽了所有我能想到的关于如何调整它以让 verifier.verify 返回的选项真的。感谢您的时间和帮助!

0 投票
1 回答
1157 浏览

asp.net - JWT认证工作流程

我的任务是为客户创建一个面向服务的生态系统。整个事情将基于 REST 并内置在 ASP.NET 中,但我的问题与技术无关。我们希望有一个集中的身份验证服务,它发布环境中其他服务信任的 JWT 令牌和声明。

我的问题是 - Web 客户端(浏览器)请求的第一件事是什么?我见过的所有图表(我将尝试添加几个示例链接)看起来好像客户需要自我意识并意识到他们在制作第一个之前需要一个令牌对功能性 REST 服务的请求,这对我来说似乎很笨拙。

我希望它工作的方式是他们只是尝试访问受保护的资源,但是我的 REST 服务向他们询问用户/密码的请求没有身份验证令牌,然后将身份验证委托给我的身份验证服务。所以:

  1. 浏览器在 REST 服务上请求受限资源
  2. REST 服务返回 401
  3. 浏览器收集凭据,发送到相同的 Web 服务
  4. REST 服务连接到身份验证服务,传递来自客户端请求的 Auth 标头
  5. Auth 服务创建 JWT 令牌并将其返回给 REST 服务
  6. REST 服务验证 JWT 并将 Auth 标头替换为 JWT 令牌
  7. JWT 令牌为后续请求保留,直到 expy 设置

......我完全不在乎这个吗?Web 客户端是否需要知道涉及到一个单独的身份验证服务并在那里发出一个请求以获取他们的 JWT,然后对通过 JWT 的 REST 资源发出第二个请求?这对我来说似乎很笨拙,我希望不是这个想法。

此外,另一个 n00b 问题 - JWT 令牌是否由 Web 客户端自动保存并随每个请求重新发送,因此我不必每次都通过身份验证服务步骤?这就是过期设置的目的吗?

TIA。

有关我的意思的示例,请参见此处的图 1:http: //msdn.microsoft.com/en-us/library/hh446531.aspx

0 投票
5 回答
12372 浏览

ios - NSData 不接受有效的 base64 编码字符串

我正在 iOS (7) cient 端实现 JSON Web Token 身份验证。它运作良好。我的应用程序接收令牌,并且可以使用它们对我的服务器进行经过身份验证的调用。

现在,我希望我的客户端代码检查令牌上的到期日期,以便知道何时重新进行身份验证。检查 JWT 身份验证令牌的到期日期很简单。授权令牌是 3 个 base64 编码的 JSON blob,用“.”分隔。- 过期时间戳位于中间 blob 中的一个名为ext. 自 unix 时代以来已经过了几秒钟。

所以我的代码看起来像这样:

问题很简单。当由 NSData -initWithBase64EncodedString 解析时,中间的 base64 blob 是nil- 这很糟糕。

我检查了base64 blob,它似乎是有效的。我的服务器目前正在返回虚拟数据,所以这里有一个示例 blob: eyJlbWFpbCI6ImZvb0BiYXIuYmF6IiwiYWNjb3VudElkIjoiMTIzNDUtNjc4OTAtYmFyLWJheiIsImV4cCI6MTM5MDkxNTAzNywiaWF0IjoxMzkwOTE0MTM3fQ

它解码为:

我在这里测试过:http ://www.base64decode.org

我在我的应用程序的其他地方成功地使用了 NSData 的 base64 方法 - 我认为我在这里没有做任何特别糟糕的事情。但我全是耳朵!有任何想法吗?

0 投票
2 回答
278 浏览

c# - DLL 必须位于 nuget 包的 lib 文件夹中

我尝试下载此 nuget 的最新版本:

适用于 Microsoft .Net Framework 4.5 3.0.1 的 JSON Web 令牌处理程序

但它没有在我的项目中正确安装。

在我的 Visual Studio 解决方案中,我查看了文件夹:

并且 DLL 存在,但它们不在lib文件夹中。它们位于包的根目录中。

当我尝试在我的 VS 项目中安装它时,它说它已安装,但没有添加任何项目引用。

我认为它坏了。任何人都可以确认 nuget必须有一个lib文件夹,并且 DLL 必须在lib文件夹中。

0 投票
2 回答
996 浏览

javascript - 如何在客户端 JavaScript 中验证 HMAC 或 RSA-SHA 签名?

我正在使用 JSON Web 令牌 (JWT) 进行基于声明的身份验证。为了防止篡改,我还使用 JWS 对令牌进行数字签名。

如何在客户端验证签名(我将 JWT 用于 SPA)?

而且,如果我也使用 JWE,我如何解密客户端的令牌?

PS:我当然知道答案:只需使用匹配算法解密和/或验证......我的问题更多的是如何完成这个。

0 投票
2 回答
2183 浏览

c# - JWT 有什么保障?

我正在使用 JWT 来生成和使用令牌。经过数周的阅读规范和谷歌搜索,我仍然不明白:如果我可以在一台机器上生成令牌然后在另一台机器上打开它,那么令牌有什么安全保障?书面令牌是否应该以某种方式加密?我正在使用andSystem.IdentityModel.Tokens创建令牌。JwtSecurityTokenJwtSecurityTokenHandler

有人可以向我指出一个关于主题的重点文档,主要解释它的安全方面吗?

0 投票
1 回答
338 浏览

security - 在 RESTful Web API 中验证后续请求的令牌签名

当用户通过身份验证时,我在响应授权标头中放置了一个签名令牌。

只能使用有效的签名令牌允许对资源 url 的每次进一步访问。

当我创建令牌并验证它时:

然后当签名密钥相同时,我得到委托人(提出请求的用户)

通过创建令牌使用。

我可以在身份验证后和资源请求期间使用相同的签名密钥来验证我创建的这个类的令牌:

我将这段代码放在一个静态类中是否有什么问题,这实际上是我的全部目的,因为我希望用随机数填充字节数组只发生一次!?

还有什么我可以改进的吗?

0 投票
0 回答
1146 浏览

security - 散列和加密 JWT 令牌

我在这里经历了不同的帖子,我现在对如何实现令牌的安全性更加困惑。. 我目前实现了一个身份验证服务(MVC4 + webAPIs)和一个依赖方(MVC4 应用程序)。依赖方 (RP) 将客户端重定向到身份验证服务 (AS)。AS 创建一个令牌,将其提供给客户端。客户将其交给 RP。RP 添加了更多声明等。这是我想要保护令牌的方法:HashingToken the token using HMAC SHA 256。如何在 AS 和 RP 之间共享密钥?我是否必须对其进行签名并将其添加到有效负载中并加密?

  • 我想使用 AES/Rijndael 算法/加密令牌。再次,我如何与 RP 共享密钥?
  • RP 将首先解密令牌并使用指定的算法对其进行解码,该算法使用共享的密钥来访问有效负载(时间戳、受众、问题等)。
  • 我正在滑动令牌到期日期。有一个字段 jit 需要是唯一的以避免重放攻击。我目前正在用 GUID 填充它。我不确定如何在 RP 中验证/使用它

我目前在 AS 和 RP 之间共享用于散列和加密的对称密钥。

我是第一次从事安全工作..虽然我已经阅读了多个帖子,但我还没有完全理解,并且在阅读了很多帖子后有点困惑。如果有人可以帮助..

0 投票
3 回答
13440 浏览

security - 注销/使 JWT 无效

我通过在自定义登录 API 中生成 JWT(JSON Web 令牌)在 Azure 移动服务中使用自定义身份验证。一旦用户拥有 JWT,它就会一直有效,直到达到其编码的到期时间。

除了在每个经过身份验证的请求上针对会话表显式检查 JWT 令牌之外,还有一种方法可以在 JWT 令牌到期时间之前使其无效(就像用户注销时会发生的那样),以便使用该令牌作为值发出的任何后续请求在X-ZUMO-AUTH标头中永远不会到达任何表 API 或自定义 API 脚本?