我正在开发一个基于 Java 的桌面应用程序,它需要从用户的 Google Drive 帐户下载一些文件。我研究了 Google Drive SDK 文档,到目前为止我已经想出了以下代码:
public class Main
{
public static void main(String[] args)
{
String clientId = "...";
String clientSecret = "...";
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport,
jsonFactory,
clientId,
clientSecret,
Arrays.asList(DriveScopes.DRIVE)
)
.setAccessType("online")
.setApprovalPrompt("auto").build();
String redirectUri = "urn:ietf:wg:oauth:2.0:oob";
String url =
flow
.newAuthorizationUrl()
.setRedirectUri(redirectUri)
.build();
System.out.println("Please open the following URL in your browser then type the authorization code:");
System.out.println(" " + url);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String code = br.readLine();
GoogleTokenResponse response =
flow
.newTokenRequest(code)
.setRedirectUri(redirectUri)
.execute();
GoogleCredential credential =
new GoogleCredential()
.setFromTokenResponse(response);
Drive service =
new Drive.Builder(httpTransport, jsonFactory, credential)
.build();
...
}
}
这可行,但它要求用户每次都对应用程序进行授权(即在浏览器中打开给定的 URL 并复制授权令牌)。我需要以一种仅在用户第一次运行时才需要授权的方式来实现该应用程序。然后,应用程序将在本地存储某种秘密令牌以供下次使用。
我已经彻底研究了文档,但我没有找到任何关于如何实现这一目标的充分解释(特别是在桌面应用程序中)。
我怎么做?