2

我有一个简单的应用程序,可以让用户绘制图片。有安卓版、IOS版和网页版。我还让用户将他们的图片存储在我们的 App 引擎服务器上,我希望他们能够与其他用户协作。我想使用谷歌帐户进行身份验证和一些权限方案的基础。

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

在基于 Web 的客户端上,我只使用 Google-web 工具包 UserService。但是对于我的应用程序引擎 servlet,我不确定我应该使用什么。目前,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)?? 利润 ??

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

有什么方法可以使 OAuthService 的旧代码正常工作吗?

OAuth 2 的示例使用 Google 任务 API,但我想使用我的应用引擎 API。我使用 cookie、webviews、title 等找到了 OAuth 1 的信息,但没有关于 OAuth 2 的信息,而且没有一个真正告诉我如何验证服务器端。

我真的不知道我应该在这里做什么。我将不胜感激任何帮助。

4

1 回答 1

0

澄清一下,这是我在应用程序引擎上提供的 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

于 2013-07-22T18:41:02.367 回答