我正在开发一个类似于谷歌日历的应用程序,用户输入他们的谷歌帐户登录,并从他们的谷歌任务同步。
在不使用 OAuth2 的情况下这可能吗?
我正在开发一个类似于谷歌日历的应用程序,用户输入他们的谷歌帐户登录,并从他们的谷歌任务同步。
在不使用 OAuth2 的情况下这可能吗?
推广 OAuth 是因为它为 Google 用户提供了保护。想象一下,如果 Google 有一个简单的用户名/密码 API。如果您是恶意站点的创建者,并且您允许用户在您的站点上输入他们的凭据,您可以存储凭据,然后在未经用户同意的情况下为用户执行操作。
你真的应该考虑通过他们的 OAuth2 系统。
如果你真的想绕过这个(并且请不要),你可以求助于发出 HTTP 请求来模拟如果用户直接输入他们的用户名和密码会发生什么,然后使用屏幕抓取来提取数据。显然,这是一种脆弱的方法,而且随着谷歌最近推出的两因素身份验证,这对于选择加入的用户来说是行不通的。
使用 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);
}
}
如果你能让这个东西运行,请告诉我。