0

我正在开发一个应用程序来向某些帐户添加任务 使用“Google 任务 API”为 java 使用 Oauth 2.0。

问题是每次我想在帐户上添加任务时,我必须到身份验证页面并使用帐户和密码对其进行授权,然后等待回调添加任务,这是不切实际的

我想知道是否有另一种方法来授权java应用程序而不执行它并避免回调函数:

可能是通过向 Gmail 帐户的所有者发送链接、发送电子邮件等方式。

所以我想做的就是:

  1. 我希望应用程序的用户从外部授权它而不执行它
  2. 当我执行它以添加任务时,如果它从用户授权我添加任务,我只想厚脸皮,如果不是,我将其跳过给另一个用户等。

谢谢

4

1 回答 1

3

典型的 OAuth 2.0 流程如下:

  1. 在一定范围内发送访问用户数据的权限请求(https://www.googleapis.com/auth/tasks
  2. 用户获得他们必须登录并允许您的应用“管理您的任务”的身份验证屏幕
  3. 您的应用收到授权码
  4. 您的应用必须将授权代码交换为访问令牌刷新令牌

访问令牌可用于向用户数据发出经过身份验证的请求,但它会在设定的时间后过期。刷新令牌永不过期(除非用户在其帐户设置中撤销您的应用程序的权限)并可用于获取新的请求令牌。

您可以在OAuth2.0 Playground中看到整个流程。

如果您正确地遵循流程并保存两个令牌(在数据库或文件中,取决于平台),那么用户应该只需要看到该屏幕一次

现在最好的部分是:Google API Java 客户端库应该为您处理这一切。要使用的确切类会根据您使用的库版本而有所不同,但您应该在创建服务对象时设置保存令牌的位置。例如,使用日历 API:

// For this example we're saving the credentials in a file on the system,
//  rather than a database.
FileCredentialStore credentialStore = new FileCredentialStore(
    new File(System.getProperty("user.home"), ".credentials/calendar.json"), JSON_FACTORY);

// set up authorization code flow
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
    HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, Collections.singleton(CalendarScopes.CALENDAR))
    .setCredentialStore(credentialStore)  // This will store the tokens for you
    .build();

您可以在此处的 calendar-cmdline-sample中查看这一点。还有很多其他示例,可以查看 App Engine 或 Android 上的授权流程。

于 2013-07-22T12:43:11.133 回答