Blog

  • Implement SocialAuth using Grails

    Posted by Sumit Rathi | Last Updated: 28-Apr-14

    While working on a project, I came across a requirement where I had to get information from a social networking service such as Facebook, Twitter or Google+ for web application. There are so many libraries to implement oAuth and OpenID for different social network service. I did some research and found one common api for each social network service i.e. SocialAuth.
     
    SocialAuth is a Java library. You can download latest java library form here.
     
    Why we use SocialAuth?
    1. There are many libraries for implementing Open ID but it is difficult to choose one that will do the integration quickly with the providers you want.
    2. Even after implementing social auth using different library, it does not work out of the box for all providers. There are always certain things specific to a certain provider. For example the scopes are different as well as some steps in authorization may be different.
     
    How SocialAuth works?
    1. Create your developer app account and get API keys from the provider like Facebook, Google+ etc.
    2. Make a request for authentication using SocialAuth library.It will redirect the user to Facebook, Google+ etc website where they enter the credentials.
    3. The Provider redirect to the user back to your application with a token.
    4. You can pass this token to the SocialAuth library to get information about the user.
     
    Steps to implement SocialAuth
    1. Make a properties file for consumer_key and consumer_secret key like oauth_counsuemr.properties.
    #googleplus
    googleapis.com.consumer_key = -----------
    googleapis.com.consumer_secret = ----------
    #yahoo 
    api.login.yahoo.com.consumer_key = --------------
    api.login.yahoo.com.consumer_secret = -------------------
    #twitter
    twitter.com.consumer_key = ---------------
    twitter.com.consumer_secret = -----------------------
    #facebook
    graph.facebook.com.consumer_key = ----------------
    graph.facebook.com.consumer_secret = -------------------
    #hotmail
    #consent.live.com.consumer_key = --------------
    #consent.live.com.consumer_secret = -----------------
    #LinkedIn
    api.linkedin.com.consumer_key = ---------
    api.linkedin.com.consumer_secret = -----------------
    
     
    2. Make an Action for Authentication.
        def authenticate() { 
    SocialAuthConfig config = SocialAuthConfig.getDefault() //You can also pass input stream, properties object or properties file name. 
    config.load() //Create an instance of SocialAuthManager and set config 
    SocialAuthManager manager = new SocialAuthManager() 
    manager.setSocialAuthConfig(config) // URL of YOUR application which will be called after authentication 
    String successUrl, url 
    successUrl= grailsApplication.config.grails.serverURL +"/socialAuthentication/getToken" // get Provider URL to which you should redirect for authentication. 
    // id can have values "facebook", "twitter", "yahoo" etc. or the OpenID 
    URL url = manager.getAuthenticationUrl(params.id, successUrl) 
    // Store in session 
    session.setAttribute("authManager", manager) 
    redirect(url) 
    }
    3. Make an Action to get token information
    def getToken() { 
    try{ // get the social auth manager from session 
    SocialAuthManager manager = (SocialAuthManager)session.getAttribute("authManager") // call connect method of manager which returns the provider object. 
    // Pass request parameter map while calling connect method. 
    AuthProvider provider = manager.connect(SocialAuthUtil.getRequestParametersMap(request)) 
    // get profile 
    Profile profileInfo = provider.getUserProfile(); 
    log.debug"profileInfo "+profileInfo 
    // do your operation here 
    }catch(SocialAuthManagerStateException exception){
     log.error("Exception occurs while connecting with SocialAuthManager--->"+exception.getMessage()) 
    }catch(Exception e){ 
    log.error("Exception --->"+e.getMessage())
     }
    
     
    For more information click here.
     
    Hope it helps :)
    Sumit Rathi

     

     

Tags: grails

View All PostsLeave a Comment
comments powered by Disqus

Mobile Applications

Video Content

Bigdata & NoSQL

SaaS Applications

Miscellaneous

Archives


Alexa Certified Site Stats for www.oodlestechnologies.com