我解決了這個確切的問題,我的應用程序推動 - http://www.pushactions.com。對於我的解決方案,我最終使用了GAE,但僅用於驗證令牌。實際的Push Actions應用程序託管在Heroku上。這裏是我的流程:
- Android應用程序產生GAE令牌然後投遞令牌&帳戶的電子郵件 地址全力推進 運行的Heroku
- 按操作崗位的令牌給我的服務操作上GAE
- 的運行GAE服務接收令牌,確定它是否有效,並返回其有效的電子郵件地址
- 推送操作將GAE返回的電子郵件地址與來自android應用程序的電子郵件地址進行比較,如果匹配,令牌有效爲那個電子郵件地址。這意味着令牌可以安全地與Google用戶的openid電子郵件地址相關聯。
據我所知,這是驗證AccountManager生成的令牌是否有效的唯一方法。誠然,它確實需要使用GAE,但只適用於整體應用程序的一小部分。我的GAE服務最終變成了1個類和幾行代碼,所以它並不多。您可以將GAE作爲由Google提供的用於驗證令牌的服務。
下面是代碼爲我的GAE服務:
package com.pushactions;
import java.io.IOException;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
@SuppressWarnings("serial")
public class PushActionsAuthServlet extends HttpServlet {
private static final Logger log = Logger.getLogger(HttpServlet.class.getName());
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if (user != null) {
req.setAttribute("user", user);
try {
req.getRequestDispatcher("/logged_in.jsp").forward(req, resp);
} catch (ServletException e) {
log.severe("Couldn't redirect to logged_in.jsp");
}
} else {
try {
req.getRequestDispatcher("/logged_out.jsp").forward(req, resp);
} catch (ServletException e) {
log.severe("Couldn't redirect to logged_out.jsp");
}
}
}
}
logged_in.jsp:
<%@ page import="com.google.appengine.api.users.User" %>
<% User user = (User)request.getAttribute("user"); %>
<?xml version="1.0" encoding="UTF-8"?>
<result>
<status>ok</status>
<user_name><%= user.getEmail() %></user_name>
</result>
logged_out.jsp:
<%@ page import="com.google.appengine.api.users.User" %>
<% User user = (User)request.getAttribute("user"); %>
<?xml version="1.0" encoding="UTF-8"?>
<result>
<status>error</status>
<message>not logged in</message>
</result>
沒有人有一個想法?我讀了很多關於一些相關主題的問題,但是我找不到解決方案。 – user765667 2011-06-09 07:07:38
我們有完全相同的問題。從我們的嘗試,似乎我們可以從AccountManager獲得的authToken只能用於獲取使用OAuth的特定Google API的權限 - 不會使用openID對用戶進行身份驗證 – 2011-06-28 18:41:00
我也很想知道,我需要做同樣的事 – dweebo 2011-07-05 20:15:27