只通过一次OAuth2流来授权我的Google API应用程序



我正在开发一个应用程序,使用"Google tasks API"为java添加任务使用Oauth 2.0。

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

我想知道是否有另一种方法可以在不执行java应用程序的情况下对其进行授权,并避免回调函数:

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

所以我想做的就是:

  1. 我希望应用程序的用户在不执行的情况下从外部对其进行授权
  2. 当我执行它来添加任务时,我只想看看它是否得到了用户的授权,我会添加任务,如果没有,我会跳过它给另一个用户等等

thx

典型的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();

您可以在此处的日历cmdline示例中查看此项。还有很多其他示例,可以在App Engine或Android上查看授权流程。

相关内容

  • 没有找到相关文章

最新更新