Wie die Authentifizierung von Google-Laufwerk, ohne dass der Benutzer kopieren/einfügen auth-code?
Ich bin Herumspielen mit der DriveCommandLine Anwendung zu lernen, die Drive API ein bisschen. Ich Frage mich nur, ob es möglich ist, zu authentifizieren meinem desktop-Anwendung mit Google-Laufwerk, ohne die Benutzer benötigen, um zu kopieren/fügen Sie einen auth-code vom browser? Sondern nur ein token zurück an die app aus dem browser? Ich bin in der Lage, dies zu tun mit Dropbox-API und das Google Documents List API, aber kann nicht herausfinden, wie man diese Arbeit mit der Google Drive API.
Dank.
Google Drive-API - DriveCommandLine Beispiel-app (leicht modifiziert):
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 Documents List API:
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);
}
- Was
redirect_uri
Werte verwenden Sie für jede dieser Optionen? Verwenden Sie die gleichen fließt? - Ich Hinzugefügt mein code, wie ich die Authentifizierung mit dem Google Documents List API, um die OP.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Befehlszeile Proben geschrieben wurden, für die Einfachheit, nicht unbedingt die beste Nutzer-Erfahrung. In diesem Fall, Sie sind ausgeführt als lokale apps und der app flow für OAuth 2.0. Das flow ist ein Modus, wo die redirect_uri kann auf localhost, aber es erfordert eine temporäre web-server zum empfangen der Umleitung. Anstatt erschweren die Probe, verwendet es die OOB-Modus, der erfordert, kopieren/einfügen den code.
Wenn Sie eine desktop-app, die möchte ich ermutigen gehen den Weg der auf localhost umgeleitet, da es eine bessere UX.
Sehen https://developers.google.com/accounts/docs/OAuth2InstalledApp für mehr info.
Schritt 1: Generierung der URL mit den offline-Zugriff geben
Schritt 2: Speichern Sie die Anmeldeinformationen accessToken und refreshToken
Schritt 3: Wiederverwendung von Token bei Bedarf
Schritt 4: Verstehen Sie OAuth zur Behandlung von Fehlern und Aktualisierung der Token
code
(wie inflow.newTokenRequest(code)
in Schritt 2?)Ändern Sie Ihre redirect_uri zu Ihrer localhost-Seite oder Projekt-Seite.Die Anforderung an den angegebenen link, wird Ihr code gesendet. Anfrage code="yourauthcode" in der url. Beispiel:
https://yourwebsite.com/yourpage.htm?code="yourauthcode"