Created
December 2, 2017 11:21
-
-
Save ssippe/8fc11c4d7e766e66f06db0431dba3f0a to your computer and use it in GitHub Desktop.
jwt+rsa+dotnet with pem
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Getting error in line Debug.WriteLine(JsonConvert.SerializeObject(claims2));
"Input string not in proper format...."