如何避免OAuth2,使用用户名和密码获取google任务资源

时间:2012-10-19 02:23:40

标签: objective-c ipad google-tasks-api

我正在开发一个类似谷歌日历的应用程序,用户输入他们的谷歌帐户登录,并从他们的谷歌任务同步。

这可以在不使用OAuth2的情况下实现吗?

2 个答案:

答案 0 :(得分:2)

推广OAuth的事实是因为它为Google用户提供了保护。想象一下,如果Google有一个简单的用户名/密码API。如果您是恶意网站的创建者,并且您允许用户在您的网站上输入其凭据,则可以存储凭据,然后在未经他们同意的情况下为用户执行操作。

你应该考虑通过他们的OAuth2系统。

如果你真的想绕过这个(并且请不要),你可以求助于发出模仿如果用户直接输入用户名和密码会发生什么的HTTP请求,然后使用屏幕抓取来提取数据。显然,这是一种脆弱的方法,并且谷歌最近推出的双因素身份验证对那些选择使用它的用户不起作用。

答案 1 :(得分:1)

使用OAuth资源所有者密码凭据流,您可以“隐藏”来自用户的OAuth流,但前提是您要管理用户的用户名/密码(它们必须作为访问令牌请求的一部分提供)。不幸的是谷歌似乎并不支持这种类型的身份验证流程,我已经与它斗争了几天,但似乎他们的后端缺乏支持。以下是Google API为Java提供的(非功能性)示例:

static void requestAccessToken() throws IOException {
  try {
    ResourceOwnerPasswordCredentialsGrant request =
        new ResourceOwnerPasswordCredentialsGrant(new NetHttpTransport(),
            new JacksonFactory(),
            "https://server.example.com/authorize",
            "s6BhdRkqt3",
            "gX1fBat3bV",
            "johndoe",
            "A3ddj3w");
    AccessTokenResponse response = request.execute();
    System.out.println("Access token: " + response.accessToken);
  } catch (HttpResponseException e) {
    AccessTokenErrorResponse response = e.response.parseAs(AccessTokenErrorResponse.class);
    System.out.println("Error: " + response.error);
  }
}

如果你可以运行这个东西,请告诉我。