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.