【问题标题】:Using private key to sign a JWT token使用私钥签署 JWT 令牌
【发布时间】:2019-08-27 23:44:32
【问题描述】:

我正在尝试加载私钥来签署 JWT 令牌。我得到以下代码,但异常失败:

string key =@"-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCTLOQaZ3D0ayC1BSW4LCs3gYmu
eYiWDGRT491PJt/4
-----END PRIVATE KEY-----";

var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.RsaSha512);

var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key));
var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.RsaSha512);

var header = new JwtHeader(signingCredentials);
var t = DateTime.UtcNow - new DateTime(1970, 1, 1);
int iat = (int)t.TotalSeconds;
var payload = new JwtPayload
{
   { "iss", "1234-5678-9012-1221-11111"},
   { "iat", iat },
   { "exp", iat + 900},
   { "sub", "aaaaaaaaaaa" }
};

var secToken = new JwtSecurityToken(header, payload);
var tokenString = new JwtSecurityTokenHandler().WriteToken(secToken);

===============答案===============================

对于任何面临同样问题的人,这里是解决方案。您需要阅读底部的帖子才能使用它:

http://www.donaldsbaconbytes.com/2016/08/create-jwt-with-a-private-rsa-key/

【问题讨论】:

  • 请同时提供异常信息。
  • 异常没有意义。我想我使用了错误的安全格式。我想要实现的是我想使用“RS512”从私钥编码 JWT 令牌。所以,我必须了解如何从密钥值中获取安全密钥对象。
  • 我编辑了你的问题。您使用密钥对令牌进行签名,而不是进行编码。令牌是 base64url 编码的,但这与密钥无关。密钥用于签名。
  • 谢谢。我想到了。所以会在这里发布解决方案
  • 在这个问题上运气好吗?

标签: c# .net .net-core jwt


【解决方案1】:

你的问题出在下面一行

var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.RsaSha512);

您正在尝试将对称密钥与非对称算法(RSA 算法)一起使用。

您可以寻找其他对称算法来生成signingCredentials 如下所示

var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256Signature);

【讨论】:

  • 感谢您的回答。我必须使用“RS512”格式。我仍然无法从私钥获取正确的 SecurityKey 对象。你有什么想法?谢谢。
  • 如果你需要使用 RSA 那么你可以使用下面的var rsa = new RSACryptoServiceProvider(2048);var signingCredentials = new SigningCredentials(new RsaSecurityKey(rsa), SecurityAlgorithms.RsaSha512);
猜你喜欢
  • 2017-07-04
  • 2019-10-18
  • 2022-11-18
  • 2020-02-03
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 2019-11-17
相关资源
最近更新 更多