I am trying to get the access token over a controller that is connected to a Salesforce site. But I am having the below error message:
System.CalloutException: Unauthorized endpoint, please check Setup->Security->Remote site settings. endpoint = https://sandbox-goku.cs87.force.com/services/oauth2/token
My controller:
public class Mycontroller {
public String accessToken {
private set;
get {
if (accessToken == null) {
accessToken = RestUtil.getAccessToken();
}
return accessToken;
}
}
}
Utility to get the access token:
public class RestUtil {
private transient static String accessToken = '';
public static String getAccessToken() {
if (accessToken == '') {
accessToken = fetchAccessToken();
}
return accessToken;
}
private static String fetchAccessToken() {
HttpRequest authReq = buildAutHttpRequest();
Http http = new Http();
HttpResponse authRes = http.send(authReq);
String accessToken = extractAccessToken(authRes);
return accessToken;
}
private static String extractAccessToken(HttpResponse authRes) {
Map<String, Object> authResult = (Map<String, Object>) JSON.deserializeUntyped(authRes.getBody());
return (String) authResult.get('access_token');
}
private static HttpRequest buildAutHttpRequest() {
HttpRequest authReq = new HttpRequest();
authReq.setEndpoint('https://' + URL.getSalesforceBaseUrl().getHost() + '/services/oauth2/token');
authReq.setMethod('POST');
authReq.setBody(buildAuthRequestBody());
return authReq;
}
private static String buildAuthRequestBody() {
String template = 'grant_type=password&username={0}&password={1}&client_id={2}&client_secret={3}';
String[] arguments = new String[]{
AdminAuthContants.USER_NAME,
AdminAuthContants.PASSWORD,
AdminAuthContants.CLIENT_ID,
AdminAuthContants.CLIENT_SECRET
};
return String.format(template, arguments);
}
}