Uwierzytelnianie pozwala określić, kim jest dana osoba, i jest zwykle nazywane rejestracją lub logowaniem użytkownika. Autoryzacja to proces przyznawania i odrzucania dostępu do danych lub zasobów. Na przykład aplikacja prosi użytkownika o zgodę na dostęp do jego Dysku Google.
Wywołania uwierzytelniania i autoryzacji powinny być dwoma oddzielnymi, oddzielnymi procesami, w zależności od potrzeb witryny lub aplikacji.
Jeśli Twoja aplikacja ma funkcje, które mogą korzystać z danych interfejsu API Google, ale nie są one wymagane w ramach głównych funkcji, zaprojektuj ją tak, aby działała płynnie w sytuacjach, gdy dane interfejsu API nie są dostępne. Możesz na przykład ukryć listę ostatnio zapisanych plików, jeśli użytkownik nie przyznał dostępu do Dysku.
Poproś o dostęp do zakresów, które są Ci potrzebne do uzyskania dostępu do interfejsów API Google, tylko wtedy, gdy użytkownik wykona działanie, które wymaga dostępu do określonego interfejsu API. Należy na przykład prosić użytkownika o dostęp do jego Dysku za każdym razem, gdy kliknie on przycisk „Zapisz na Dysku”.
Dzięki oddzieleniu autoryzacji od uwierzytelniania unikniesz przytłoczenia nowych użytkowników i zdezorientowania użytkowników, którzy zastanawiają się, 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 w Google, zalecamy użycie metody AuthorizationClient.
Wysyłanie prośby o uprawnienia wymagane przez działania użytkownika
Za każdym razem, gdy użytkownik wykonuje 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 Dysku, 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
w aktywności możesz sprawdzić, czy uzyskano wymagane uprawnienia, 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);
}
}