Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
jwt+rsa+dotnet with pem
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography;
using Newtonsoft.Json;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Security;
namespace jwt
{
class Program
{
private const string PrivateKey = @"-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKCAQEA6OOvYVVd4vq4Q2K1SPOZ9IBe36QDAqrMK5e0DkmJlhy9Y29E
WfRlhEzt5+2IJU+SuKQojoNY3U2p4BA7KYbvH2DwCuxtTUXjP44fych3qtfMmnoM
wPzmgK1afYcTs/cM4JtYtdpEGSTst1mRH+Als8W2qc9MH2SFeQe3H/SmSF8KBrfO
zDtAHCRG0+vPTJcCFdmsyQfSLigwFsUULWkxNdtGp7i7z/cMdJ1fq/dHDaB34EEz
4ye7B/XeQlj0jlO5cOUco22Kne29Wp3vXQUbKHRGD8mXMBGBoBVOFxx8aKoXqoIm
QkLwOM55uhreOaEJDfjHnThonxyJguMmY2KfkwIDAQABAoIBAQDhQol6nfWn/FaK
Z0lt/KHnStt5ecynocjGSYARabO5DKdrLE5yq+AdbcOX17seS69hBPdtkUI9HEe5
wDlZW3ijY0ILbs/yNC0wZin9JPgKuZzftjnr2TKjOAoU7Lh0E/vSrK/LhgjkQUDt
v6aNrGMLVavu5+F7Y+FuRbYtJJhJ2jq4UmUIgxinvBaH7QdAxPLFgupaVFjOtVQ6
ajjZyjByHYg4ouBLIHez1PfeDPTLZkeUl/ULBIow96HsbJkqzgeTl9uV+1bNy4xO
dJJHuF61IZiEbh4plB4E2u0m8mblS32A+PbVCCzg4x29H90W5uc7YvANRveJ7Rkv
aVhIYcixAoGBAP6DIYEdPM26pSgVYkfPMLDdc4yq01X5GSJVmW1MozfI6qmm8kHp
+ibajMzwhXGARR6OZMxORDp3JheqzBxRwYBzS95z8t9Dh7vCFRbxEzcV8d3dVFu0
YGUFANXcgykYvVjG0jPXwJS6PlDoAJLYvVsSRzPMYUosWzmY3LEtIOTtAoGBAOpA
MkO4kp1GO9Z2mvqWchI1vBsCIGjHIWivsKqmYXBsKiLeyn6n3V57EhW0V3euFqiE
5rp85tdYxjNv7CFojbjiExRW2cnvoq4cs+it8HWlUtGgOLmrzih/zukfFRsY/d2a
s6eyJeJmY4PzzS7AJCpskZ55/hIo2SBvgurWkYZ/AoGBAP1g1REyZ181asjuCQsO
hR3/SdMIGh+kP1aEO5upyXB3EM/XSaU/Z/AYckZxSZiGp8lU35rabGh8SCsVueCT
r/3OSwDrFCcbltzgypgtZwDXUxSbDSnC+Jh5k6xVvSpD2/Wu8oP0TmCCzhlD75ZC
OrmZB9PUrCLo5+T+fu/Qyse9AoGBAMLqT+jRuA1t13SIlERW0uwcEj1W86i7qSz2
o8YbU5C8MAN75nqlKynmthGhUfafwPLQQzyBmYMutx0t0AmseeCRHNcbvXSuFWtT
LtA5i5AY1GThMNIuBwjj8ENCPcmibfrrMvoi3isYj03Im75+2pkCZdi8IZDytFis
8P5/M+/5AoGBAIZzfPB2dmZX4OWvcgrfubzT6uhegSNO44zwj2UTgxyshcLkPiy+
p7FesUDph/imXkWVnhYRc3J00OZ1GsnAq+FGFl7Fyg3LaE7jrZFOQaTZhnARtriq
uTnLM/5EsMQje5VKa0/AYBkL7Jee2U8p/tBbuns4tzVMcANiFVfW7rCP
-----END RSA PRIVATE KEY-----
";
private const string PublicKey = @"-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6OOvYVVd4vq4Q2K1SPOZ
9IBe36QDAqrMK5e0DkmJlhy9Y29EWfRlhEzt5+2IJU+SuKQojoNY3U2p4BA7KYbv
H2DwCuxtTUXjP44fych3qtfMmnoMwPzmgK1afYcTs/cM4JtYtdpEGSTst1mRH+Al
s8W2qc9MH2SFeQe3H/SmSF8KBrfOzDtAHCRG0+vPTJcCFdmsyQfSLigwFsUULWkx
NdtGp7i7z/cMdJ1fq/dHDaB34EEz4ye7B/XeQlj0jlO5cOUco22Kne29Wp3vXQUb
KHRGD8mXMBGBoBVOFxx8aKoXqoImQkLwOM55uhreOaEJDfjHnThonxyJguMmY2Kf
kwIDAQAB
-----END PUBLIC KEY-----
";
static void Main(string[] args)
{
var claims = new Dictionary<string, object>
{
{"sub", "1234567890"},
{"name", "John Doe"},
{"admin", true},
};
var jwt = GetJwt(claims, PrivateKey);
Debug.WriteLine("===JWT===");
Debug.WriteLine(jwt);
Debug.WriteLine("");
var claims2 = GetClaims(jwt, PublicKey);
Debug.WriteLine("===CLAIMS2===");
Debug.WriteLine(JsonConvert.SerializeObject(claims2));
Debug.WriteLine("");
}
static string GetJwt(Dictionary<string, object> claims, string privateKey)
{
using (var rsa = GetRSACryptoServiceProvider(privateKey,true))
{
var jwt = Jose.JWT.Encode(claims, rsa, Jose.JwsAlgorithm.RS256);
return jwt;
}
}
static RSACryptoServiceProvider GetRSACryptoServiceProvider(string key, bool isPrivate)
{
var rsaParams = GetRsaParams(key, isPrivate);
var rsa = new RSACryptoServiceProvider();
rsa.ImportParameters(rsaParams);
return rsa;
}
static RSAParameters GetRsaParams(string key, bool isPrivate)
{
if (isPrivate)
{
AsymmetricCipherKeyPair keyPair;
using (var sr = new StringReader(key))
{
PemReader pr = new PemReader(sr);
keyPair = (AsymmetricCipherKeyPair) pr.ReadObject();
}
return DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters) keyPair.Private);
}
AsymmetricKeyParameter keyParam;
using (var sr = new StringReader(key))
{
PemReader pr = new PemReader(sr);
keyParam = (AsymmetricKeyParameter)pr.ReadObject();
}
return DotNetUtilities.ToRSAParameters((RsaKeyParameters)keyParam);
}
static Dictionary<string, object> GetClaims(string jwt, string publicKey)
{
using (var rsa = GetRSACryptoServiceProvider(publicKey, false))
{
var payload = Jose.JWT.Decode<Dictionary<string, object>>(jwt, rsa);
return payload;
}
}
}
}
@venkatdev22

This comment has been minimized.

Copy link

@venkatdev22 venkatdev22 commented Apr 16, 2019

Getting error in line Debug.WriteLine(JsonConvert.SerializeObject(claims2));
"Input string not in proper format...."

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.