#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. Поэтому я создал этот проект, вы можете проверить, подходит ли он вам.