OAuth и API Google plus

#java #groovy #oauth #oauth-2.0 #google-plus

#java #groovy #oauth #oauth-2.0 #google-plus

Вопрос:

Я использую код Google-start-project в одном из своих приложений gaelyk. Это усовершенствованный код для процесса авторизации OAuth 2.0. В отличие от Twitter, всякий раз, когда приложение запрашивает авторизацию, пользователь должен разрешить приложению продолжить работу, и я думаю, это странно. Есть какие-то ошибки, которые я допустил?

     // Check for an error returned by OAuth
if ( params.error ) {
    response.setContentType("text/plain");
    out.println("There was a problem during authentication: "   error);
    log.severe("There was a problem during authentication: "   error);
    return;
}

// When we're redirected back from the OAuth 2.0 grant page, a code will be supplied in a GET parameter named 'code'

if ( !params.code ) {
    // Now that we have the OAuth 2.0 code, we must exchange it for a token to make API requests.

    // Build the authorization URL
    AuthorizationRequestUrl authorizeUrl = new GoogleAuthorizationRequestUrl(
            CLIENT_ID,
            REDIRECT_URI,
            SCOPES
        );
    authorizeUrl.redirectUri = REDIRECT_URI;
    authorizeUrl.scope = SCOPES;
    String authorizationUrl = authorizeUrl.build();

    log.info("Redirecting browser for OAuth 2.0 authorization to "   authorizationUrl);
    response.sendRedirect(authorizationUrl);
    return;
} else {
    log.info("Exchanging OAuth code for access token using server side call");

    AccessTokenResponse accessTokenResponse = new GoogleAccessTokenRequest.GoogleAuthorizationCodeGrant(
            new NetHttpTransport(),
            new GsonFactory(),
            CLIENT_ID,
            CLIENT_SECRET,
            params.code,
            REDIRECT_URI
        ).execute();

    log.info("Storing authentication token into the session");
    request.session.accessToken = accessTokenResponse.accessToken
    request.session.refreshToken = accessTokenResponse.refreshToken

    //The authentication is all done! Redirect back to the samples index so you can play with them.
    response.sendRedirect("/");
}
  

Комментарии:

1. какова ценность вашего redirect_uri ? у меня здесь проблема.

Ответ №1:

Нет, вы все делаете правильно. Я думаю, что Google не поддерживает авторизацию только для аутентификации. В чем и заключается идея OAuth — авторизовать пользователей, а не аутентифицировать их. Для аутентификации вы можете использовать OpenID.

Кстати, начальный проект немного сложен, не поддерживает maven и не обновляется своевременно, когда Google добавляет новые методы API. Поэтому я создал этот проект, вы можете проверить, подходит ли он вам.