Używam aplikacji DriveCommandLine, aby nauczyć się trochę interfejsu Drive API. Zastanawiam się tylko, czy możliwe jest uwierzytelnienie mojej aplikacji komputerowej na Dysku Google bez konieczności kopiowania/wklejania kodu autorskiego z przeglądarki? Ale czy po prostu przekazano token z aplikacji do przeglądarki? Mogę to zrobić za pomocą interfejsu API Dropbox i interfejsu API listy dokumentów Google, ale nie mogę się dowiedzieć, jak to działa, używając interfejsu API Dysku Google.Jak uwierzytelnić Dysk Google, nie wymagając od użytkownika kopiowania/wklejania kodu autorskiego?
Dzięki.
Dysk Google API - aplikacja próbka DriveCommandLine (nieco zmodyfikowane):
public class DriveCommandLine {
private static String CLIENT_ID = APPCONSTANTS.Google.CONSUMER_KEY;
private static String CLIENT_SECRET = APPCONSTANTS.Google.CONSUMER_SECRET;
private static String REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob";
public static void main(String[] args) throws IOException, URISyntaxException {
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, Arrays.asList(DriveScopes.DRIVE))
.setAccessType("offline")
.setApprovalPrompt("force").build();
String url = flow.newAuthorizationUrl().setRedirectUri(REDIRECT_URI).build();
System.out.println("Enter authorization code:");
Desktop.getDesktop().browse(new URI(url));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String code = br.readLine();
GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URI).execute();
GoogleCredential credential = new GoogleCredential().setFromTokenResponse(response);
//Create a new authorized API client
Drive service = new Drive.Builder(httpTransport, jsonFactory, credential).build();
}
Google API Lista Dokumenty:
public void authenticate(){
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(APPCONSTANTS.Google.CONSUMER_KEY);
OAuthSigner signer;
if (APPCONSTANTS.Google.USE_RSA_SIGNING) {
signer = new OAuthRsaSha1Signer(APPCONSTANTS.Google.CONSUMER_SECRET);
} else {
oauthParameters.setOAuthConsumerSecret(APPCONSTANTS.Google.CONSUMER_SECRET);
signer = new OAuthHmacSha1Signer();
}
GoogleOAuthHelper oauthHelper = new GoogleOAuthHelper(signer);
oauthParameters.setScope(APPCONSTANTS.Google.SCOPES);
oauthHelper.getUnauthorizedRequestToken(oauthParameters);
String requestUrl = oauthHelper.createUserAuthorizationUrl(oauthParameters);
Desktop desktop = Desktop.getDesktop();
URI url = new URI(requestUrl);
desktop.browse(url);
String token = oauthHelper.getAccessToken(oauthParameters);
}
Jakich wartości 'redirect_uri' używasz dla każdej z tych opcji? Czy korzystasz z tych samych przepływów? –
Dodałem kod do uwierzytelniania za pomocą interfejsu API listy dokumentów Google do OP. – PseudoPsyche