La autenticación establece la identidad de una persona y, por lo general, se la denomina usuario registrarse o acceder. La autorización es el proceso de otorgar o rechazar el acceso. a los datos o recursos. Por ejemplo, tu app solicita el consentimiento del usuario para acceder a la cuenta de Google Drive del usuario.
Las llamadas de autenticación y autorización deben ser dos según las necesidades del sitio o la aplicación.
Si tu app tiene funciones que pueden usar los datos de la API de Google, pero no están requerida como parte de las funciones principales de tu aplicación, debes diseñarla para manejar correctamente los casos en los que no se puede acceder a los datos de la API. Por ejemplo: podrías ocultar una lista de archivos guardados recientemente cuando el usuario no haya otorgado acceso el acceso a los datos.
Solo debes solicitar acceso a los permisos que necesitas para acceder a las APIs de Google. Cuando el usuario realiza una acción que requiere acceso a una API determinada. Para Por ejemplo, debes solicitar permiso para acceder a la cuenta de Drive del usuario siempre que usuario presiona un botón "Guardar en Drive" .
Si separas la autorización de la autenticación, puedes evitar abrumar nuevos o confundir a los usuarios respecto del motivo por el que se les solicita ciertos permisos.
En los servicios de identidad de Google, la autenticación se realiza con SignInClient. Para autorizar acciones que requieren acceso a los datos del usuario almacenados por Google, recomienda usar AuthorizationClient.
Solicitud de permisos requeridos por las acciones del usuario
Cuando un usuario realice una acción que requiera un alcance adicional, llama
AuthorizationClient.authorize()
Por ejemplo, si un usuario realiza una acción que requiere acceso a su cuenta de Drive almacenamiento de la app, haz lo siguiente:
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));
En la devolución de llamada onActivityResult
de tu actividad, puedes verificar si se requiere
los permisos se hayan adquirido correctamente y, de ser así, lleve a cabo la acción del usuario.
@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);
}
}