Я использую GAE + GWT + Guice, выполняю следующие действия для API контактов Google.(см. код)
Когда служба Google перенаправляет обратно на URL приложения с токеном, создается новый сеанс, так как URL был вызван с сервера Google, а не из браузера клиента.
Два вопроса
1. Это правильное поведение?Если нет, как я могу это исправить?
2. Каков предпочтительный способ хранения / использования токена для запрашивающего пользователя?
Запрос сервлета (GWT RPC)
public String getAuthLink() {
String next = "http://localhost:8888/serviceCallback?service=GMAIL";
String scope = "https://www.google.com/m8/feeds/";
boolean secure = false;
boolean session = true;
return AuthSubUtil.getRequestUrl(next, scope, secure, session);
}
@Override
public boolean isAuthenticated(ServiceProviderKey serviceProviderKey) {
//SESSION PRINT A
System.out.println("Session: " + getThreadLocalRequest().getSession().getId());
//SOME CODE
}
Обратный сервлет
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
String authToken = req.getParameter("token");
String sessionToken = AuthSubUtil.exchangeForSessionToken(authToken, null);
//SESSION PRINT B
System.out.println("Session: " + req.getSession().getId());
req.getSession().setAttribute("token", sessionToken);
}
EDIT
Я понял, что получение другого сеанса - это правильное поведение, поэтому теперь я хочу выяснить, для какого пользователя(сеанс в моем приложении) Я получил обратный вызов для.поэтому я передал session_id / user_id в callback_uri, но это не разрешено, URI обратного вызова должен совпадать с зарегистрированным URI обратного вызова в консоли API Google.Я действительно застрял .. Похоже, только у меня есть эта конкретная проблема, есть идеи?