我正在尝试使用 C# 中的 Bouncycastle 签署/验证 Json Web 令牌。我已经成功使用 RSXXX 和 HSXXX,但无法成功验证使用 ES256 签名的签名。我一直在使用https://kjur.github.io/jsrsasign/tool_jwt.html作为我的量尺,并使用这个简单的函数来验证生成的 JWT。
public static bool IsTokenValid(
string jwtBase,
string jwtSignature,
string publicKey,
string algorithmName)
{
ISigner signer = SignerUtilities.GetSigner(algorithmName);
byte[] publicKeyBytes = Convert.FromBase64String(publicKey);
AsymmetricKeyParameter publicKeyParameters =
PublicKeyFactory.CreateKey(publicKeyBytes);
byte[] signatureBaseBytes = Encoding.UTF8.GetBytes(jwtBase);
signer.Init(false, publicKeyParameters);
signer.BlockUpdate(signatureBaseBytes, 0, signatureBaseBytes.Length);
byte[] signatureBytes = Convert.FromBase64String(
ToProperBase64String(jwtSignature));
return signer.VerifySignature(signatureBytes);
}
public static string ToProperBase64String(string instance)
{
instance = instance.Replace('-', '+').Replace('_', '/').Replace("\r", "");
while (instance.Length % 4 != 0)
{
instance = instance + "=";
}
return instance;
}
Run Code Online (Sandbox Code Playgroud)
以下是使用默认私钥签名的 jwt 示例。
string signatureBase =
"eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2p3dC1pZHAuZXhhbXBsZS5jb20iLCJzdWIiOiJtYWlsdG86bWlrZUBleGFtcGxlLmNvbSIsIm5iZiI6MTQ3OTUzMjM0MSwiZXhwIjoxNDc5NTM1OTQxLCJpYXQiOjE0Nzk1MzIzNDEsImp0aSI6ImlkMTIzNDU2IiwidHlwIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9yZWdpc3RlciIsImF1ZCI6WyJodHRwOi8vZm9vMS5jb20iLCJodHRwOi8vZm9vMi5jb20iXX0";
string signature = "aGHSDpqHqGuG89OJCapCVBYvkpStCra8ZD4py02wGf7dPiC6mEdquE2YEGuYcjMKlNOR_0lwzpuNx0xoSmr81A";
string publicKey = @"-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoBUyo8CQAFPeYPvv78ylh5MwFZjT
CLQeb042TjiMJxG+9DLFmRSMlBQ9T/RsLLc+PmpB1+7yPAR+oR5gZn3kJQ==
-----END PUBLIC KEY-----
".Replace("-----BEGIN PUBLIC KEY-----", "")
.Replace("\n", "")
.Replace("-----END PUBLIC KEY-----", "");
bool isValid = IsTokenValid(signatureBase, signature, publicKey, "SHA-256withECDSA");
//above evaluates to false
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么吗?或者,我会对另一个可以签名和验证 ES256 JWT 的 .NET PCL 实现感到满意
| 归档时间: |
|
| 查看次数: |
1771 次 |
| 最近记录: |