典型的 OAuth 2.0 流程如下:
- 在一定范围内发送访问用户数据的权限请求(https://www.googleapis.com/auth/tasks)
- 用户获得他们必须登录并允许您的应用“管理您的任务”的身份验证屏幕
- 您的应用收到授权码
- 您的应用必须将授权代码交换为访问令牌和刷新令牌。
访问令牌可用于向用户数据发出经过身份验证的请求,但它会在设定的时间后过期。刷新令牌永不过期(除非用户在其帐户设置中撤销您的应用程序的权限)并可用于获取新的请求令牌。
您可以在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 上的授权流程。