function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
AAjayAAjay 

how to revoke access token


List< OauthToken > lstOauthToken = [Select id, user.name, accesstoken,DeleteToken From OauthToken Where userid =: Userinfo.getUserId() AND 
            (appname = 'Salesforce1 for Android' OR appname = 'Salesforce1 for iOS')];
        String urlRevoke = 'https://login.salesforce.com/services/oauth2/revoke?token=';
        urlRevoke += lstOauthToken[0].DeleteToken;
        HttpRequest req = new HttpRequest();
        req.setEndpoint(urlRevoke);
        req.setHeader('Content-Type','application/x-www-form-urlencoded');
        req.setMethod('GET');
        
        Http http = new Http();
        HttpResponse res = http.send(req);
        system.debug('CR=response= '+res);

I got this error message:      Status=Found, StatusCode=302

If someone know how to fix, share please!
shailesh dhumalshailesh dhumal
Hi Aajay,

I don't know if its too late to respond to this thread.

But i have used your code given above today and it worked for me.  

I have only changed https://login.salesforce.com to my instance url https://na23.salesforce.com


Hope this helps.
 
shailesh dhumalshailesh dhumal
Sorry i have also included this line ...  missed to add the same in my previous comments - 
      String tokenEncode = EncodingUtil.URLENCODE(lstOauthToken[0].DeleteToken,'UTF-8');

        urlRevoke += tokenEncode;

====
Here is the complete code - 

List< OauthToken > lstOauthToken = [Select id, user.name, accesstoken,DeleteToken From OauthToken Where userid =: Userinfo.getUserId() AND
            (appname = 'Salesforce1 for Android' OR appname = 'Salesforce1 for iOS')];
        String urlRevoke = 'https://na23.salesforce.com/services/oauth2/revoke?token=';
        String tokenEncode = EncodingUtil.URLENCODE(lstOauthToken[0].DeleteToken,'UTF-8');
        urlRevoke += tokenEncode;
        HttpRequest req = new HttpRequest();
        req.setEndpoint(urlRevoke);
        req.setHeader('Content-Type','application/x-www-form-urlencoded');
        req.setMethod('GET');
       
        Http http = new Http();
        HttpResponse res = http.send(req);
        system.debug('CR=response= '+res);
 
Raphael Barreiros 14Raphael Barreiros 14
Based on @shailesh dhumal, I've made it work on Flow or Process Builder and it gets the ORG URL (better approch to deploy and My Domain)
Its easier for Functional people =)

1) Change the Connected App name on the query (replace 'YOUR Connected App Name')
2) Don't forget to add your URL on Remote Site Settings. You can enable User Debug and run this class to see the right one.
 
global class DeleteOAuthToken {
@InvocableMethod(label='DeleteOAuthToken' description='')
    public static void mobileLogout(){        
    		List< OauthToken > lstOauthToken = [SELECT id, user.name, LastUsedDate, AccessToken, DeleteToken FROM OauthToken WHERE userid =: Userinfo.getUserId() AND AppName = 'YOUR Connected App Name' order by LastUsedDate asc];
            String URL = URL.getSalesforceBaseUrl().toExternalForm();
        	String urlRevoke = '/services/oauth2/revoke?token=';
            String tokenEncode = EncodingUtil.URLENCODE(lstOauthToken[0].DeleteToken,'UTF-8');
            URL += urlRevoke += tokenEncode;
            HttpRequest req = new HttpRequest();
            req.setEndpoint(URL);
            req.setHeader('Content-Type','application/x-www-form-urlencoded');
            req.setMethod('GET');
           
            Http http = new Http();
            HttpResponse res = http.send(req);
            system.debug('CR=response= '+res);
        
    }
}

 
Viraj VerlekarViraj Verlekar
To add to a package, we need to create a test class. How do you create a test class for this?