与这里提到的问题类似,我有一个问题,当运行在.NET Core2.2(在macOS和Windows上)上时,JWT验证可以工作,但在.NET Framework 4.7.2上却无法运行;在那里,它抛出一个异常:
Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException:“IDX10503:签名验证失败。已尝试的密钥:“Microsoft.IdentityModel.Tokens.RsaseCurityKey,KeyId:”。捕获的异常:“”。内标识:“{”typ“:”jwt“,”alg“:”rs256“}.{”sub“:”username“,”scope“:”exampleScope“,”roles“:[”exampleRole“],”iss“:”https://example.com/“,”exp“:1556788122,”iat“:1555316893}”.“
在C:\agent1_work\109\s\src\system.identitymodel.tokens.jwt.jwtsecuritytokenhandler.validateSignature(String token,
测试程序:
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Claims;
using System.Security.Cryptography;
using Microsoft.IdentityModel.Logging;
using Microsoft.IdentityModel.Tokens;
namespace JWTTest {
class Program {
static void Main(string[] args) {
// Validation parameters
//var rsa = new RSACryptoServiceProvider(); // this works in .NET Core on macOS but not on Windows ...
var rsa = RSA.Create();
rsa.KeySize = 2048;
rsa.ImportParameters(new RSAParameters {
Modulus = Convert.FromBase64String("AM/Nh9cX8U+8ZeOcKyodBcZun1dgQysFZWLplOof9SpHt45vmh7gy3FxhLQEj2NrhV44AiymRxr1mmZ7K9K105MfDe/QAAFBy715/NHmKZxH7QvypiiPMf2jwpb+n/Ss0oUZ68zPSfO9aZwhUBWO+J7NBnWEwoq3Bxda5IQPMRkMohD5VZ0IPvUotcg6k7cOoRamvOiDyVQ58uVx+Wd+vucdVo6uT/kMKlBZoahU/hnREfNZojf0lAkzcxOlZcKbms/+Mu8vb/jeZSGYZpykL0c3ohGJ49NteFIXggx8AH6E8ROpijq2NeA7AK3Y+33LEJmSwOdNnZ1ZaY515AqeN/S+ay4Ra15V91qdu4ph1B+G5aKV3rcu0v1Y6/eG5dgHPIBRaf7sGVG7rCDOgrfbjaEdNvqX1TgNnmfogZElFt2qs5VVWKE5zEuOEkOngTEuvlJAsTgh/Uw/OS7vinbSmtGXFhKS2teatITyuNALaPeFAdA9qz9c90IJs9vbf9Uf9FFWvfrer9lhDhLUuehKJTt8vBtoqea46nf3IGthLeiGQmrVSEytoTGW67gGpVo8Xd+iat5ilhciNWX1/rscv66cg0S1IK7A/oXqWJO/WNq6EzFxI/f/0klMrcC8M5qioiiwNMvpAj/6KDZSxoII+rS9RDz/E0xWprkErrIa7aVv"),
Exponent = Convert.FromBase64String("AQAB")
});
var validationParameters = new TokenValidationParameters {
ClockSkew = TimeSpan.FromMinutes(1),
ValidateAudience = false,
ValidateIssuer = true,
ValidIssuer = "https://example.com/",
IssuerSigningKey = new RsaSecurityKey(rsa)
};
// Verify token
IdentityModelEventSource.ShowPII = true;
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
var token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ1c2VybmFtZSIsInNjb3BlIjoiZXhhbXBsZXNjb3BlIiwicm9sZXMiOlsiZXhhbXBsZXJvbGUiXSwiaXNzIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS8iLCJleHAiOjE1NTY3ODgxMjIsImlhdCI6MTU1NTMxNjg5M30.XHowlwvKX73I2KqKFInaadAGZNtj7UVvjh1EuodnttlUOmC59Q6XPSwrKkATLqicl46c7ItYGl75Mj5PVy03tOXXlxgsgoP81t1WM08QeHlrbPvay1aSFqcj7JcnX6fu9qiXzRhhh2XYw5UrT8-R3kIQMQA7d4cnT6Z1oeoHzV38ywi3rv3BapwuFtrFmSXHHsQMcTUK_Whf-5CEPj6O9CEdCXKFh05McGZDBoYBgZpn7d2H2EJNV9KhsasafsD7TVs6w3myOfc3HaqtHhFDUmpzwmWZdzn-i0zSxz1qussd9ovDaf03zkd7OWtau9_44T1KkWVK8GlAxuXnuPmCuh76ELQjpNqQerRL-F4EYkUwUJEQHFf2IolpCx4i2pDkzyax-fL4ZwjsncWNUJdXyex3Pk-OcSD11lJl0UWRE5gh-pOeEd1Ybhxu4z42Vet1rAM3VWXXyJQzAz2diVTJIbvaG3uq4-HxoBTkvfpXLj_2RN_oSTkyD8JoBIHQtMT1h7eZhHbxFLsxLoGNQVWJmyU_BPCs282m41n2Jd4ezR1M1XlLUixk8v1M1Rjxg3s7c8Q_PezmXzv3IrK8ftrmfb73uBwTxJukOeFk3yC7e7ZLhYJsBlJsyeGfJF8ayNSjxwkrXJN3JVZMOzZCQNnl3zc8AL6gjloFFlhgB5nlxJU";
// exception is thrown on the next line:
var user = handler.ValidateToken(token, validationParameters, out SecurityToken validatedToken);
foreach (var role in user.Claims.Where(c => c.Type == ClaimTypes.Role)) {
Console.WriteLine("Role: " + role.Value);
}
}
}
}
JWT是用这个Java库生成的,但我不确定这是否重要;根据jwt.io,它是有效的。(链接说签名无效,但这是网站中的一个bug;只需在公钥末尾添加一个换行符即可触发验证。)我试过RS256和RS512算法生成的代币,但这没有什么区别。
我不确定它是否取决于Visual Studio设置;
不,Java图书馆不应该是问题所在。该问题在您所附的同一链接中提及。您需要重写并使用自定义密钥验证,因为库中的RSA解密附带了某种错误。
看看这和这更多的信息[再次它是相同的链接,你附上]。
该问题被引用到另一个问题中并被关闭。可能它应该被修复,除非一些包没有更新或在那里提到的版本。
编辑: 阅读有关bug的讨论:https://github.com/tymondesigns/jwt-auth/issues/83 我原来的问题是: 我正在使用jwt auth my protected resources实现,该资源需要经过身份验证的用户,代码如下: 当用户在API上登录时,将创建一个授权令牌,并将响应授权标头发送到调用资源的客户端应用程序。因此,客户端应用程序在截获任何响应的头
我一直在关注Caroline的博客来设置一个多用户composer rest服务器。所以,我有两个服务器,即。管理服务器和用户服务器。 正如教程I中提到的: null 我第一次从Java服务交换JWT令牌。为了创建承载令牌,我编写了以下代码: 有了这个,我就能拿到令牌了。接下来,我使用这个令牌将卡导入到用户服务器上的钱包中: 然而,这导致:
使用Mockito示例页面中最基本的示例,我能够在JUnit中成功运行。 然而,当我在斯波克运行相同的测试时,它失败了。 JUnit/Java版本(通过): Spock/Groovy版本(此失败): 以下是斯波克测试失败时出现的错误: 有什么想法或建议吗?我真的很喜欢斯波克和莫奇托,希望他们能很好地合作。非常感谢!
服务器:验证 问候
null 问题: 如何在前端获取此? 有效负载可以保存关于用户的任何信息(而不是任何敏感信息,如密码)。由于JWT在途中可能被篡改,所以在前端不验证JWT的情况下使用有效负载信息不危险吗?
安装NoDJS、Ruby和Git + Buver后,尝试安装基础。 我一直收到以下错误,我不知道如何修复它: 找不到有效的宝石'基础'( 有什么想法吗?