【问题标题】:How do I authenticate/validate an Android app on an App Engine Server with OAuth 2?如何使用 OAuth 2 在 App Engine 服务器上对 Android 应用进行身份验证/验证?
【发布时间】:2012-12-25 13:40:26
【问题描述】:

我有一个简单的应用程序,可以让用户绘制图片。有安卓版、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、标题等找到了 OAuth 1 的信息,但没有关于 OAuth 2 的信息,而且没有一个真正告诉我如何验证服务器端。

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

【问题讨论】:

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


    【解决方案1】:

    为了澄清,这是我在应用引擎上提供的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 2014-08-14
      • 1970-01-01
      相关资源
      最近更新 更多