Xác thực xác định ai đó là ai và thường được gọi là người dùng đăng ký. Uỷ quyền là quá trình cấp hoặc từ chối quyền truy cập vào dữ liệu hoặc tài nguyên. Ví dụ: ứng dụng của bạn yêu cầu người dùng đồng ý để truy cập vào Google Drive của người dùng.
Lệnh gọi xác thực và uỷ quyền phải tách biệt và riêng biệt dựa trên nhu cầu của trang web hoặc ứng dụng.
Nếu ứng dụng của bạn có các tính năng có thể sử dụng dữ liệu của API của Google, nhưng không là một phần bắt buộc trong tính năng cốt lõi của ứng dụng, bạn nên thiết kế ứng dụng sao có thể xử lý linh hoạt các trường hợp khi không thể truy cập dữ liệu API. Ví dụ: bạn có thể ẩn danh sách các tệp đã lưu gần đây khi người dùng chưa cấp Drive truy cập.
Bạn nên yêu cầu quyền truy cập vào những phạm vi chỉ cần truy cập vào API của Google khi người dùng thực hiện một thao tác cần quyền truy cập vào một API cụ thể. Cho Ví dụ: bạn nên yêu cầu quyền truy cập vào Drive của người dùng bất cứ khi nào người dùng nhấn vào một "Lưu vào Drive" .
Bằng cách tách biệt việc uỷ quyền khỏi quy trình xác thực, bạn có thể tránh được quá nhiều thông tin mới người dùng hoặc làm người dùng bối rối về lý do họ được yêu cầu cung cấp những quyền truy cập.
Trong Dịch vụ nhận dạng của Google, việc xác thực được thực hiện bằng SignInClient. Để cho phép những hành động cần quyền truy cập vào dữ liệu người dùng do Google lưu trữ, chúng tôi bạn nên sử dụng AuthorizationClient.
Yêu cầu cấp quyền do hành động của người dùng
Bất cứ khi nào người dùng thực hiện một hành động cần thêm phạm vi, hãy gọi
AuthorizationClient.authorize()
.
Ví dụ: Nếu người dùng thực hiện một hành động và cần quyền truy cập vào Drive của họ bộ nhớ của ứng dụng, hãy làm như sau:
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));
Trong lệnh gọi lại onActivityResult
của hoạt động, bạn có thể kiểm tra xem
đã được cấp quyền thành công và nếu có thì thực hiện hành động của người dùng.
@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);
}
}