Autenticação

Exemplo de código para criptografia do usuário e senha no envio de Token.

using System.Security.Cryptography;
using System.Text;
using System.Text.Json;


string jwksUrl = "https://sso-sandbox.cedrotech.com/.well-known/openid-configuration/jwks";
string publicKey = ExtractPublicKey(jwksUrl);

// Serializar a chave pública em formato JSON
RSAParameters rsaParams = ParseRSAParametersFromJson(publicKey);

// Criar objeto RSA a partir dos parâmetros
using RSA rsa = RSA.Create();
rsa.ImportParameters(rsaParams);

// Exemplo de objeto a ser criptografado
var obj = new { username = "usuario_aqui", password = "senha_aqui" };
string jsonString = JsonSerializer.Serialize(obj);

// Converter a string JSON em bytes
byte[] plainBytes = Encoding.UTF8.GetBytes(jsonString);

// Criptografar o objeto usando a chave pública RSA
byte[] encryptedBytes = rsa.Encrypt(plainBytes, RSAEncryptionPadding.OaepSHA256);

// Exibir o resultado da criptografia
string encryptedString = Convert.ToBase64String(encryptedBytes);
Console.WriteLine("Objeto criptografado: " + encryptedString);



static string ExtractPublicKey(string jwksUrl)
{
    using (HttpClient client = new HttpClient())
    {
        string jwksJson = client.GetStringAsync(jwksUrl).Result;
        var jwks = JsonSerializer.Deserialize<JwksResponse>(jwksJson);
        return JsonSerializer.Serialize(jwks.keys[0]);
    }
}

static RSAParameters ParseRSAParametersFromJson(string publicKeyJson)
{
    var jsonDocument = JsonDocument.Parse(publicKeyJson);

    var rsaParams = new RSAParameters
    {
        Exponent = Base64UrlDecode(jsonDocument.RootElement.GetProperty("e").GetString()),
        Modulus = Base64UrlDecode(jsonDocument.RootElement.GetProperty("n").GetString())
    };

    return rsaParams;
}

static byte[] Base64UrlDecode(string base64Url)
{
    string base64 = base64Url.Replace('_', '/').Replace('-', '+');
    while (base64.Length % 4 != 0)
    {
        base64 += '=';
    }

    return Convert.FromBase64String(base64);
}

class JwksResponse
{
    public Key[] keys { get; set; }
}

class Key
{
    public string kty { get; set; }
    public string use { get; set; }
    public string kid { get; set; }
    public string x5t { get; set; }
    public string e { get; set; }
    public string n { get; set; }
    public string[] x5c { get; set; }
    public string alg { get; set; }
}

📘

Para obter mais informações sobre este serviço, acesse a página de autenticação.