JWT

String iss = ‘hddhhd’;

String aud = ‘https://login.salesforce.com’;
String sub = ‘ayub@tenetizer.com’;
Long exp = DateTime.now().addMinutes(5).getTime();

String jwtHeader = ‘{“typ”:”JWT”,”alg”:”RS256″}’;
String jwtClaims = ‘{“iss”:”‘ + iss + ‘”,”sub”:”‘ + sub + ‘”,”aud”:”‘ + aud + ‘”,”exp”:’ + exp + ‘}’;

String jwtRequest = System.encodingUtil.base64Encode(Blob.valueOf(jwtHeader)).replace(‘+’, ‘-‘).replace(‘/’, ‘‘) + ‘.’ + System.encodingUtil.base64Encode(Blob.valueOf(jwtClaims)).replace(‘+’, ‘-‘).replace(‘/’, ‘‘);
String signature = System.encodingUtil.base64Encode(Crypto.signWithCertificate(‘RSA-SHA256’, Blob.valueOf(jwtRequest), ‘Akwa_VoC_Sync’)).replace(‘+’, ‘-‘).replace(‘/’, ‘_’);

String signedJwtRequest = jwtRequest + ‘.’ + signature;
system.debug(signedJwtRequest);

String payload = ‘grant_type=’ + System.EncodingUtil.urlEncode(‘urn:ietf:params:oauth:grant-type:jwt-bearer’, ‘UTF-8’);
payload += ‘&assertion=’ + signedJwtRequest;

Http httpObj = new Http();
HttpRequest req = new HttpRequest();
HttpResponse res;

req.setEndpoint(‘https://login.salesforce.com/services/oauth2/token’);
req.setMethod(‘POST’);
req.setHeader(‘Content-Type’, ‘application/x-www-form-urlencoded’);
req.setBody(payload);

res = httpObj.send(req);

system.debug(res.getBody());