問題描述
我有自己的私鑰字符串,即
I have my own private key string, i.e.
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCSAYYgzvGTww....
....
....
.....
3yUMYj9oYzqdrRHP0XgD0cEEvyqPBwLaNsRdFwy5qTiHjj0f+ZWHQWmqcoLmmpzyZEbIvQm/VhbjRF6iKG4WZ9Hfa7ntYRNGdWgD/KMIeZI=
-----END RSA PRIVATE KEY-----
現在,我需要在 C# 中使用此私鑰簽署我的聲明集以生成 JWT 有效負載.
Now, I need to sign my claim set using this private key in C# to generate JWT payload.
我寫了以下代碼:
var utc0 = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
var issueTime = DateTime.Now;
var iat = (int)issueTime.Subtract(utc0).TotalSeconds;
var exp = (int)issueTime.AddMinutes(55).Subtract(utc0).TotalSeconds;
var payload = new
{
iss = email,
prn = prn,
scope = "scope",
aud = "https://example.com",
exp = exp,
iat = iat
};
var segments = new List<string>();
var header = new { typ = "JWT", alg = "RS256" };
byte[] headerBytes = Encoding.UTF8.GetBytes(jsonSerializer.Serialize(header));
byte[] payloadBytes = Encoding.UTF8.GetBytes(jsonSerializer.Serialize(payload));
segments.Add(Base64UrlEncode(headerBytes));
segments.Add(Base64UrlEncode(payloadBytes));
var stringToSign = string.Join(".", segments.ToArray());
var bytesToSign = Encoding.UTF8.GetBytes(stringToSign);
現在我需要這些 bytesToSign 由我的私鑰簽名,正如我上面提到的使用 rs256 算法.任何人都可以幫忙嗎?
Now I need these bytesToSign to be signed by my private key as I mentioned above using the rs256 alogorithm. Can anyone help?
我已按照以下內容更新了我的代碼:
I've updated my code as per the following:
var pemprivatekey = OpenSSLKey.DecodeOpenSSLPrivateKey(privateKey);
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
if (pemprivatekey != null)
{
rsaProvider = OpenSSLKey.DecodeRSAPrivateKey(pemprivatekey);
}
byte[] signature = rsaProvider.SignData(bytesToSign, "SHA256");
segments.Add(Base64UrlEncode(signature));
return string.Join(".", segments.ToArray());
并生成 JWT 令牌.請讓我知道我在哪里犯了錯誤,因為它不正確:當我將它傳遞給 API 時,它不起作用并引發錯誤.
and generated JWT token. Please let me know where I made a mistake as its not correct one: when I pass it to the API, it doesn't work and throws an error.
推薦答案
我找到了一些純粹基于 Javascript 的解決方案,如果它對任何人有用的話.您可以在這里找到 JS 庫.
I found some purely Javascript based solution, if it is useful to anyone. You can find the JS Libraries here.
它解決了我的要求.
這篇關于如何使用我自己的 rsa 私鑰使用 rs256 算法對字節進行簽名?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!