Мы пытаемся использовать Oauth2 для входа в наше приложение и в Документы Google, но у нас много проблем.
При развертывании незарегистрированный пользователь перенаправляет на URL:
HTTP: //----.appspot.com/_ah/login_required продолжить = HTTP: //------.appspot.com/oauth2
Но на странице выдается ошибка: NOT_FOUND
Мы следовали этому примеру приложений Google App Engine http://code.google.com/p/google-api-java-client/wiki/OAuth2, doGet выглядит так:
try {
redirectUri = getRedirectUri(request);
response.sendRedirect(initializeFlow().newAuthorizationUrl().setRedirectUri(redirectUri).build());
} catch (ServletException e) {
Log.info("Redirect Error "+e.getLocalizedMessage());
e.printStackTrace();
}
Наши ограничения безопасности в web.xml:
<security-constraint>
<web-resource-collection>
<url-pattern>/oauth2</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
У нас также проблемы с доступом к API Документов Google.
В devmode мы получаем эту ошибку при запросе разрешений и после нажатия кнопки Разрешить доступ:
HTTP ОШИБКА 404
Проблема с доступом к /oauth2callback%3Fgwt.codesvr=127.0.0.1:9997. Причина:
NOT_FOUND
Вот так выглядит URL:
http // 127.0.0.1:8888/oauth2callback%3Fgwt.codesvr=127.0.0.1:9997?code=4/g_fjsddhegiko4eifsdkl
метод getRedirectUri в Oauth2
protected String getRedirectUri(HttpServletRequest req) throws ServletException, IOException {
GenericUrl url = new GenericUrl(req.getRequestURL().toString());
String URL = "/oauth2callback";
if(req.getRequestURL().toString().contains("http://127.0.0.1:8888")) {
URL += Global.getLocalcodesvr();
}
url.setRawPath(URL);
return url.build();
}
Мы зарегистрировали наше приложение и URL-адреса обратных вызовов, необходимые как для devmode, так и для развернутых.
Мы уже потратили несколько дней на их решение.