Please find the code to Convert JWT to PCKS
keytool
-importkeystore -srckeystore LocalfolderPath\FileName.jks -destkeystore LocalfolderPath\FileName.cer -srcstoretype JKS -deststoretype
PKCS12 -deststorepass password
keytool
-importkeystore -srckeystore LocalfolderPath\FileName.jks -destkeystore LocalfolderPath\FileName.p12 -srcstoretype JKS
-deststoretype PKCS12 -srcstorepass password -deststorepass gridserve
-srcalias Randomname2020 -destalias 1 -srckeypass password-destkeypass password–noprompt
LocalfolderPath\FileName.cer - PKCS File(Certificate)
password - Password for JKS
static string ToBase64UrlString(byte[] input)
{
return Convert.ToBase64String(input).TrimEnd('=').Replace('+', '-').Replace('/', '_');
}
//Create Lead
public static GetLeadResults createLead(string access_token)
{
var clientSend = new RestClient("https://orgName.salesforce.com/services/data/v49.0/sobjects/Lead");
var requestSend = new RestRequest(Method.POST);
requestSend.AddHeader("postman-token", "93331841-f3d2-de3e-dbcf-309a32fa1a7c");
requestSend.AddHeader("cache-control", "no-cache");
requestSend.AddHeader("content-type", "application/json");
requestSend.AddHeader("authorization", "Bearer " + access_token);
requestSend.AddParameter("application/json", "{ "FirstName": "Raghu"} ", ParameterType.RequestBody);
IRestResponse responseSend = clientSend.Execute(requestSend);
GetLeadResults getCreatedResults = JsonConvert.DeserializeObject<GetLeadResults>(responseSend.Content);
return getCreatedResults;
}
public static GenerateToken GetAccessToken()
{
// certificate
//X509Certificate2 certificate = new X509Certificate2(@"localpath\filename.pfx", "password", X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);
// header
var header = new { alg = "RS256" };
var claimset = new
{
iss = "client_id",
sub = "Email",
aud = "https://test.salesforce.com",
exp = expiryDate,
};
var ser = new JavaScriptSerializer();
// encoded header
var headerSerialized = ser.Serialize(header);
var headerBytes = Encoding.UTF8.GetBytes(headerSerialized);
var headerEncoded = ToBase64UrlString(headerBytes);
// encoded claimset
var claimsetSerialized = ser.Serialize(claimset);
var claimsetBytes = Encoding.UTF8.GetBytes(claimsetSerialized);
var claimsetEncoded = ToBase64UrlString(claimsetBytes);
// input
var input = headerEncoded + "." + claimsetEncoded;
var inputBytes = Encoding.UTF8.GetBytes(input);
// signiture
var rsa = certificate.PrivateKey as RSACryptoServiceProvider;
var signingCredentials = new X509SigningCredentials(certificate, "RS256");
var signature = JwtTokenUtilities.CreateEncodedSignature(input, signingCredentials);
// jwt
var jwt = headerEncoded + "." + claimsetEncoded + "." + signature;
var client = new WebClient();
client.Encoding = Encoding.UTF8;
var content = new NameValueCollection();
var clients = new RestClient("https://org.salesforce.com/services/oauth2/token");
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
//request.AddHeader("authorization", "client_id:3MVG9uAc45HBYUriJoqjtxJLD.1f.Vptl72m7pFWVLcdgslPKKdE8K31RrUqiqDS5y2bTvu99B.OcdhSaK9c9, " +
// "client_secret:79A8DC7B0586433932A6EB846C76C8920145DFE7AE0BE0B28ED076C5397F9ADC");
request.AddHeader("authorization", "client_id:clientid,client_secret:clientSecret");
request.AddParameter("application/x-www-form-urlencoded", "assertion=" + jwt +
"&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer", ParameterType.RequestBody);
IRestResponse response = clients.Execute(request);
GenerateToken customerDto = JsonConvert.DeserializeObject<GenerateToken>(response.Content);
return customerDto;
}
public class GenerateToken
{
public string access_token { get; set; }
public string scope { get; set; }
public string instance_url { get; set; }
public string token_type { get; set; }
public string id { get; set; }
}
private static int GetExpiryDate()
{
var utc0 = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
var currentUtcTime = DateTime.UtcNow;
var exp = (int)currentUtcTime.AddMinutes(4).Subtract(utc0).TotalSeconds;
return exp;
}
public class GetLeadResults
{
public string id { get; set; }
public string success { get; set; }
public string[] errors { get; set; }
}