How to make a request for an access token using the refresh token with Google OAuth 2.0

老子叫甜甜 提交于 2019-12-12 18:28:12

问题


i think the context of my question is clear enough, but i would like to specifiy that i'm using a OAuth for Web Application, so I used this Example provided by Google: OAuth 2.0 for WebApplication I understood that i have to create (for example in the same class (extended by HttpServlet)) a doGet method (obviously in Override) to obtain the correct flow to authorize the user with own scopes, so something like this:

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    //This is a class to obtain the Current Google User's ID
    UserService userService = UserServiceFactory.getUserService();
    String userId = userService.getCurrentUser().getUserId();

    String url = getAuthorizationUrl(userId);

    if(req.getParameter("code")!=null){
        try {

            String authorizationCode = req.getParameter("code");
            getCredentials(authorizationCode);
        } catch (CodeExchangeException | NoRefreshTokenException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //the next page (my homePage)
        resp.sendRedirect("/home");
    }
    else{
        resp.sendRedirect(url);
    }
}

This successfully work, if you look at the provided method 'getCredential(authorizationCode)' it shows 2 method: storeCredential and getStoredCredential. The first method works perfectly and i can see the refreshToken and accessToken strings in my Datastore indeed. The problem is to build the getStoredCredential method, because it returns a Credential object and i don't know to write it. I show you the beginning of the method but i don't know how to carry on.

static Credential getStoredCredentials(String googlePlusUserId) {
        // TODO: Implement this method to work with your database. Instantiate a new
        // Credential instance with stored accessToken and refreshToken.

        //These methods of my Class correctly get the tokens (already debugged)
        String refreshToken = UserManager.getStoredRefreshToken(googlePlusUserId);
        String accessToken = UserManager.getStoredAccessToken(googlePlusUserId);

        //How can i continue here? :-( to return Credential with correct parameters?
        //......
        //......
        //......
        //......
    }

Does this method works forever? Because in Google OAuth Playgroung there is a checkbox that says: "Auto-refresh the token before it expires" (i think in 3600 seconds). So, i don't think that completing my getStoredCredential get my App working correctly...I think that is only useful for get always the last token...So in this case i can never obtain a new accessToken using the Stored RefreshToken. Does anyone can help me please? Maybe with a simple method that refresh the old AccessToken.

来源:https://stackoverflow.com/questions/24117748/how-to-make-a-request-for-an-access-token-using-the-refresh-token-with-google-oa

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!