My target is generate JWT token using RS256 algorithm using RSA private key. My steps for this:
I have generated a rsa private key using following command:
openssl genrsa -out private_key.pem 2048
after that I write below code to generate JWT token:
var claims = ......(list of claims)...
string privateKey = File.ReadAllText(@"C:\Users\FazlaElahiMdJubayer\private_key.pem");
CreateToken(privateKey, claims);
private static void CreateToken(string privateKey, List<Claim> claims)
{
RSAParameters rsaParams;
using (var tr = new StringReader(privateKey))
{
var pemReader = new PemReader(tr);
var keyPair = pemReader.ReadObject() as AsymmetricCipherKeyPair;
if (keyPair == null)
{
throw new Exception("Could not read RSA private key");
}
var privateRsaParams = keyPair.Private as RsaPrivateCrtKeyParameters;
rsaParams = DotNetUtilities.ToRSAParameters(privateRsaParams);
}
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportParameters(rsaParams);
Dictionary<string, object> payload = claims.ToDictionary(k => k.Type, v => (object)v.Value);
var token = Jose.JWT.Encode(payload, rsa, Jose.JwsAlgorithm.RS256);
}
}
but somehow the keyPair is null and throw Could not read RSA private key
even though my code successfully read the private key from the .pem file. Is there anything wrong with my private key? What steps I am missing?
my private key is below:
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCu7awWqTY3RtPT
APwkC/4ufWSEkm/fieobjkZHUjpUU836me1enYncEXJue6t9bB7SQck7THgG1O12
jxT9mCbQWSmwdWUpIj6AvGkyAGuMAJzfzrU0x95SJEtIjOnIA0gPQQ3UR7oKgO7I
K2z40qpuy9l2NxZ1YxffBRkqpV16LHD9KuFOsd0iMWnViJI3yLqsUMwOKaj+L9aR
yCGGZ0Y8oFBCzZyY5irtyVHlzlI+kZRmi4N3ZxAEmXYVO4jOtlIj47RpK3WWBEGa
kTLkdTLkMaR/WCHIhvOl/vtgK0PEc18+fbFGUlOiPuIqyXGtnzOPdvVm2WCF+U25
eoxCbjJbAgMBAAECggEAOZf8HFvrA0kZDfRZj964+gKD+VgjaFSGlTsDLZFHriMH
gtZyPkAdNy0xYWnrXPifrzdEs3bqX8l0Q6A5V4NkaB2rKbOFMoVZUdZ2xiU4Q5ii
DdgHdlDGBIJ5nPH0OMvHymnvTTCucq3fsF0H3Ga0AZWxTAg4Jz8QiXeqwQ1AGSyD
DVPOaj7tsBmTMm/HfhTmv5yKkRXDANChjOwdP/iHn4YMuyWLqR9GbLJElVP1WnGm
die9n7H56e9MydwC56tW13I5DBEqZWBAGi0Am8/qwO5Ne66zPpjMBzXvXzUY4MYj
HflH7xA5tGA6TNwQKP9/Fm/1j6GseAVLrVJyWeeIUQKBgQC5AmKPOu4AW6/NL3kD
wERjzAw7NCLej5jZ9tCCdogsCApRB1atSD9LDCPVUNXFfMhDPDpO+Ybg2Zb5pSVr
vOXA+1wbvEPv2Qdtvqv5ricshcBLARjaKr0RwKUH6yzG4DjkvE2QnS3KV+XVROVn
n73J7gBrA/8B6r1iM/kU2hDfsQKBgQDyDQgFyirVKggzsRnHQzJxVsmxKAqrV0Zo
GC4hINoPGAzqNma2ekEk8X6m2lu1cMWHDgraV55OktlC4HFdLn/d1VTFKy88b0mD
HK2+OVd62PzO94DQBYddPfi2ATAaXFv7/8ijHZB3v3vnxJbtd3haoROwIAfu0EUW
tLG0SmchywKBgCTuHvJsVvnnU25n3YYsKPqqzn466AL5Mw+/PtvsAT6Y1EZcaqbo
VwoKAFUib6meQPN64EDHem8DwClRF+krqckd48L9j6oe7mavuvB6HQO8JyhRrb5O
7bLPe6HbBfMk6vZtyCXn2i4b4Zryx8ApmN7oDVlPUOX3D5q8uSm6ZcfhAoGAGvYg
oqR2SPA5oahkerGdeMp2BOm05oj+KrIm0UHbiDrhlWUh48mSYA8WUHeaJ4e8OOLz
ioaf95ib4rslZX+8dnVA0AWTaWPsCFK1d67jc6ef4V3oV0OGZHh2r69KMGWBSXyg
WKr+YJhPsO1Q8nqQSWgPzVqEB7HjQDg4YyC2hCkCgYBsUur/iqsG4oHwFdEFLEgH
TLgjkcuJZfdKkgz4zOJS2jwnTKV1gfS1UAEA1vNs9qmX71FzV/Su55Fgr1feljef
LBrHllWAWRHQNcRsjIOljLcF3yCsE5NZsn9HPEFlhYIMXi5ZbDpWvSkO7zp9QQNa
ci9m4h9FKl2AjrWWco32yQ==
-----END PRIVATE KEY-----
and my claims are like this:
var claims = new[]
{
new Claim("partnerUrl", "https://www.my-domain.com"),
new Claim("offerId", "adsaddsadadsad"),
new Claim("returnUrl", "https://demo.com/lend/"),
new Claim("expireOn", "2006-09-18T00:00:00.000Z"),
};