es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

C# Crear JWT con Encabezados Personalizados y Firmar con Clave Privada

Estoy tratando de averiguar cómo crear un JWT en C# que tenga encabezados personalizados y esté firmado con una clave privada. Mi intento actual es el siguiente y parece funcionar excepto que no he encontrado una forma de incluir encabezados personalizados en él también.

string publicKey = File.ReadAllText(@"C:\Users\blah\Desktop\Keys\testpublickey.pem");
string privateKey = File.ReadAllText(@"C:\Users\blah\Desktop\Keys\testprivatekey.pem");
var random = new Random();
int num = random.Next(1000000, 500000000);
var exp = DateTime.Now.AddMinutes(10).Ticks;

var claims = new List<claim>();
claims.Add(new Claim("iss", "919d1ebb-bf3d-4c03-8855-b72b376db9ad"));
claims.Add(new Claim("sub", "919d1ebb-bf3d-4c03-8855-b72b376db9ad"));
claims.Add(new Claim("aud", @"https://api.alt.www.blah.com/auth/oauth/v2/token"));
claims.Add(new Claim("exp", exp.ToString()));
claims.Add(new Claim("jti", num.ToString()));

var token = CreateToken(claims, privateKey);

y CreateToken:

private static string CreateToken(List<claim> claims, string privateRsaKey)
{
    RSAParameters rsaParams;
    using (var tr = new StringReader(privateRsaKey))
    {
        var pemReader = new PemReader(tr);

        var privateRsaParams = pemReader.ReadObject() as Org.BouncyCastle.Crypto.Parameters.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);
        return Jose.JWT.Encode(payload, rsa, Jose.JwsAlgorithm.RS256);
    }
}

¿Cómo puedo agregar encabezados personalizados a un JWT firmado con una clave privada?</string,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agregar encabezados personalizados a un JWT firmado con una clave privada en C#, puedes incluirlos en el parámetro “header” al llamar al método JWT.Encode. Por ejemplo:

    var header = new Dictionary<string, object="">
    {
        { "alg", "RS256" },
        { "typ", "JWT" },
        { "custom_header", "custom_value" }
    };
    var encodedJwt = Jose.JWT.Encode(payload, rsa, Jose.JwsAlgorithm.RS256, header);
    

    En este ejemplo, hemos agregado un encabezado personalizado “custom_header” con un valor de “custom_value”. Puedes agregar encabezados personalizados adicionales al diccionario “header” según sea necesario. Ten en cuenta que los encabezados “alg” y “typ” son requeridos por la especificación JWT y deben incluirse con los valores apropiados.</string,>

Comments are closed.