Die Authentifizierung bestimmt, wer eine Person ist. Sie wird allgemein als Nutzerregistrierung oder -anmeldung bezeichnet. Autorisierung ist das Gewähren oder Ablehnen des Zugriffs auf Daten oder Ressourcen. Beispiel: Ihre Anwendung fordert die Zustimmung des Nutzers an, um auf sein Google Drive-Konto zuzugreifen.
Authentifizierungs- und Autorisierungsaufrufe sollten je nach den Anforderungen der Website oder Anwendung in zwei separaten und unterschiedlichen Abläufen erfolgen.
Wenn Ihre App Funktionen enthält, für die Google API-Daten verwendet werden können, die aber nicht zu den Hauptfunktionen der App gehören, sollten Sie Ihre App so gestalten, dass sie Fälle ohne Zugriff auf API-Daten problemlos verarbeiten kann. Sie können beispielsweise eine Liste kürzlich gespeicherter Dateien ausblenden, wenn der Nutzer keinen Zugriff auf Drive gewährt hat.
Sie sollten nur dann Zugriff auf Bereiche anfordern, auf die Sie auf Google APIs zugreifen müssen, wenn der Nutzer eine Aktion ausführt, die Zugriff auf eine bestimmte API erfordert. Beispielsweise sollten Sie immer dann die Berechtigung für den Zugriff auf das Drive-Konto des Nutzers anfordern, wenn der Nutzer auf die Schaltfläche „In Drive speichern“ tippt.
Wenn Sie die Autorisierung von der Authentifizierung trennen, vermeiden Sie es, neue Nutzer zu überfordern oder sie nicht mehr darüber zu informieren, warum sie nach bestimmten Berechtigungen gefragt werden.
In Google Identity Services erfolgt die Authentifizierung mit dem SignInClient. Zur Autorisierung von Aktionen, die Zugriff auf von Google gespeicherte Nutzerdaten benötigen, empfehlen wir die Verwendung von AuthorizationClient.
Für Nutzeraktionen erforderliche Berechtigungen anfordern
Immer wenn ein Nutzer eine Aktion ausführt, die einen zusätzlichen Umfang erfordert, rufen Sie AuthorizationClient.authorize()
auf.
Wenn ein Nutzer beispielsweise eine Aktion ausführt, für die Zugriff auf den Drive-App-Speicher erforderlich ist, gehen Sie so vor:
List<Scopes> requestedScopes = Arrays.asList(DriveScopes.DRIVE_APPDATA);
AuthorizationRequest authorizationRequest = AuthorizationRequest.builder().setRequestedScopes(requestedScopes).build();
Identity.getAuthorizationClient(this)
.authorize(builder.build())
.addOnSuccessListener(
authorizationResult -> {
if (authorizationResult.hasResolution()) {
// Access needs to be granted by the user
PendingIntent pendingIntent = authorizationResult.getPendingIntent();
try {
startIntentSenderForResult(pendingIntent.getIntentSender(),
REQUEST_AUTHORIZE, null, 0, 0, 0, null);
} catch (IntentSender.SendIntentException e) {
Log.e(TAG, "Couldn't start Authorization UI: " + e.getLocalizedMessage());
}
} else {
// Access already granted, continue with user action
saveToDriveAppFolder(authorizationResult);
}
})
.addOnFailureListener(e -> Log.e(TAG, "Failed to authorize", e));
Im onActivityResult
-Callback Ihrer Aktivität können Sie prüfen, ob die erforderlichen Berechtigungen erfolgreich erworben wurden. Wenn ja, führen Sie die Nutzeraktion aus.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == MainActivity.REQUEST_AUTHORIZE) {
AuthorizationResult authorizationResult = Identity.getAuthorizationClient(this).getAuthorizationResultFromIntent(data);
saveToDriveAppFolder(authorizationResult);
}
}