Uwierzytelnianie pozwala ustalić, kim jest użytkownik, i jest zwykle nazywane rejestracją lub logowaniem użytkowników. Autoryzacja to proces przyznawania i odrzucania dostępu do danych lub zasobów. Na przykład aplikacja prosi o zgodę użytkownika na dostęp do jego Dysku Google.
Wywołania uwierzytelniania i autoryzacji powinny odbywać się w 2 odrębnych procesach, zależnie od potrzeb witryny lub aplikacji.
Jeśli aplikacja ma funkcje, które mogą korzystać z danych interfejsu API Google, ale nie są wymagane w ramach jej głównych funkcji, zaprojektuj ją tak, aby działała płynnie w przypadkach, gdy dane interfejsu API nie są dostępne. Jeśli użytkownik nie przyzna dostępu do Dysku, możesz na przykład ukryć listę ostatnio zapisanych plików.
O dostęp do zakresów potrzebnych do uzyskania dostępu do interfejsów API Google należy prosić tylko wtedy, gdy użytkownik wykona działanie wymagające dostępu do określonego interfejsu API. Możesz na przykład prosić użytkownika o dostęp do jego Dysku za każdym razem, gdy kliknie przycisk „Zapisz na Dysku”.
Oddzielając autoryzację od uwierzytelniania, możesz uniknąć przytłoczenia nowych użytkowników i dezorientowania użytkowników, którzy nie będą wiedzieć, dlaczego są proszeni o określone uprawnienia.
W usługach tożsamości Google uwierzytelnianie odbywa się przy użyciu SignInClient. Do autoryzowania działań, które wymagają dostępu do danych użytkownika przechowywanych przez Google, zalecamy użycie narzędzia AuthorizationClient.
Wysyłanie prośby o uprawnienia wymagane przez działania użytkownika
Za każdym razem, gdy użytkownik wykona działanie, które wymaga dodatkowego zakresu, wywołaj funkcję AuthorizationClient.authorize()
.
Jeśli na przykład użytkownik wykona działanie, które wymaga dostępu do miejsca w aplikacji Dysk, wykonaj te czynności:
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));
W wywołaniu zwrotnym onActivityResult
możesz sprawdzić, czy wymagane uprawnienia zostały uzyskane, a jeśli tak, wykonaj działanie użytkownika.
@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);
}
}