如何使用OAuth 2在App Engine服务器上验证/验证Android应用?

时间:2013-01-11 01:33:32

标签: android google-app-engine authentication servlets oauth-2.0

我有一个简单的应用程序,可以让用户绘制图片。有Android,IOS和基于Web的版本。我还允许用户将他们的图片存储在我们的App引擎服务器上,我希望他们能够与其他用户协作。我想使用Google帐户进行身份验证以及某些权限方案的基础。

我不知道如何在Android(或IOS)上验证/验证用户的Google帐户。我希望有人可以帮助或指出我正确的方向。这是我到目前为止所理解的:

在基于Web的客户端上,我只使用Google-web工具包UserService。但是对于我的app-engine servlets,我不确定应该使用什么。目前servlet的代码如下:

  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws IOException, ServletException
{
    OAuthService oauth = null; 
    oauth = OAuthServiceFactory.getOAuthService(); 
    User user = oauth.getCurrentUser();
    // Do stuff
}

在我的Android应用程序中,我认为我应该做类似的事情:

1)从AccountManager获取帐户

2)致电:

accountManager.getAuthToken
(account,  // Account 
"oauth2:https://www.googleapis.com/auth/userinfo.profile",//AUTH Token Type
null,   // Options
this,  // Activity
new MyAccountsManagerCallBack(),  // call-back
null);    // Handler

这会给我授权令牌。

3)??利润??

这是我迷失的地方。我是否将此授权令牌作为明文查询参数发送到我的app-engine服务器,然后从Web服务器向userinfo / profile api发出请求?这似乎不安全。

有没有办法让OAuthService的先前代码工作?

OAuth 2的示例使用Google任务API,但我想使用我的app-engine API。我已经使用Cookie,网页浏览量,标题等找到了OAuth 1的信息,但OAuth 2上没有任何信息,而且没有一个真正告诉我如何验证服务器端。

我真的不知道我应该在这做什么。我将不胜感激。

1 个答案:

答案 0 :(得分:0)

为了澄清,这是我在app引擎上提供的java servlet的一个例子:

public class ServletSecureData extends HttpServlet { 
  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    UserService usersrvc = null;      
    usersrvc = UserServiceFactory.getUserService();
    User user = usersrvc.getCurrentUser();
    if(user == null)
      throw new IOException();

    Random r = new Random(System.currentTimeMillis());
    int num = r.nextInt(10);
    PrintWriter out = response.getWriter();
    out.printf("Security !! %s radioactive man! %d", user.getEmail(), num);
    out.close();
  }
}

此servlet受web.xml文件中定义的安全性约束的保护。我希望能够使用Android客户端访问此servlet。我以为我必须使用Oauth但事实证明我需要使用较旧的弃用服务ClientLogin

我的实施基于此网站的代码:http://blog.notdot.net/2010/05/Authenticating-against-App-Engine-from-an-Android-app