FETCHING ACCESS TOKEN FOR EINSTEIN PLATFORM SERVICES AUTHNTICATION USING
JWT
JSON Web Token:
JSON Web Token (JWT) is an open standard (RFC 7519) that
defines a compact and self-contained way for securely transmitting information
between parties as a JSON object. This information can be verified and trusted
because it is digitally signed. JWTs can be signed using a secret (with the
HMAC algorithm) or a public/private key pair using RSA or ECDSA.
Although JWTs can be encrypted to also provide secrecy
between parties, we will focus on signed tokens. Signed tokens can verify the
integrity of the claims contained within it, while encrypted tokens hide those
claims from other parties. When tokens are signed using public/private key
pairs, the signature also certifies that only the party holding the private key
is the one that signed it.
Utility of JWT:
Authorization:
This is the most common scenario for using JWT. Once the user is logged in,
each subsequent request will include the JWT, allowing the user to access
routes, services, and resources that are permitted with that token. Single Sign
On is a feature that widely uses JWT nowadays, because of its small overhead
and its ability to be easily used across different domains.
Information Exchange:
JSON Web Tokens are a good way of securely transmitting information between
parties. Because JWTs can be signed—for example, using public/private key
pairs—you can be sure the senders are who they say they are. Additionally, as
the signature is calculated using the header and the payload, you can also
verify that the content hasn't been tampered with.
Salesforce has provided a manual way of getting the access
token from https://api.einstein.ai/token
Steps to get the
access token using apex code:
·
Create Einstein Platform Services Account: https://api.einstein.ai/signup, where we get a private key.
·
Download that key and upload that key in your
salesforce org.
·
Use this code to get the access token of
Einstein AI:
JWT jwt = new JWT('RS256'); // Initializing JWT
ContentVersion base64Content =
[SELECT Title, VersionData FROM ContentVersion where
title='einstein_platform']; //
query to fetch the private key form the files
String keyContents =
base64Content.VersionData.tostring();
keyContents =
keyContents.replace('-----BEGIN RSA PRIVATE KEY-----', '');
keyContents =
keyContents.replace('-----END RSA PRIVATE KEY-----', '');
keyContents = keyContents.replace('\n',
'');
jwt.pkcs8 = keyContents;
jwt.aud =
'https://api.einstein.ai/v1/oauth2/token'; // End point of the authorization URL
jwt.validFor = integer.valueOf(200000); // timestamp in seconds
jwt.iss = 'developer.force.com'; // Issuer
jwt.sub = '<Your email from where you
created Einstein platform services account>';
String access_token =
JWTBearerFlow.getAccessToken('https://api.einstein.ai/v1/oauth2/token', jwt); // Command to get the access
token using JWT bearer flow
system.debug('access_token - '+access_token); // This is your Access token
References:
Comments
Post a Comment