Zugriff auf Nutzerdaten autorisieren

Die Authentifizierung bestimmt, wer eine Person ist. Sie wird allgemein als Nutzerregistrierung oder -anmeldung bezeichnet. Autorisierung ist der Vorgang, bei dem der Zugriff auf Daten oder Ressourcen gewährt oder verweigert wird. Ihre App fordert beispielsweise die Einwilligung des Nutzers für den Zugriff auf Google Drive an.

Authentifizierungs- und Autorisierungsaufrufe sollten je nach Anforderungen der Website oder App zwei separate und unterschiedliche Abläufe sein.

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 konzipieren, dass sie auch mit nicht zugänglichen API-Daten umgehen kann. Sie können beispielsweise eine Liste der zuletzt gespeicherten Dateien ausblenden, wenn der Nutzer keinen Zugriff auf Drive gewährt hat.

Sie sollten den Zugriff auf Bereiche, auf die Sie auf Google APIs zugreifen müssen, nur dann anfordern, 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, dass neue Nutzer überlastet oder verwirrt werden, warum sie nach bestimmten Berechtigungen gefragt werden.

In Google Identity Services erfolgt die Authentifizierung mit 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

Wenn ein Nutzer eine Aktion ausführt, für die ein zusätzlicher Umfang erforderlich ist, 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(authorizationRequest)
        .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 erhalten 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);
  }
}