Xác thực là quá trình xác định danh tính của một người và thường được gọi là đăng ký hoặc đăng nhập của người dùng. 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 ý cho phép ứng dụng truy cập vào Google Drive của người dùng.
Các lệnh gọi xác thực và uỷ quyền phải là hai quy trình riêng biệt và khác biệt dựa trên nhu cầu của ứng dụng.
Nếu ứng dụng của bạn có những tính năng có thể sử dụng dữ liệu API của Google nhưng không bắt buộc phải có trong các tính năng cốt lõi của ứng dụng, thì bạn nên thiết kế ứng dụng để có thể xử lý các trường hợp khi không truy cập được vào dữ liệu API một cách hiệu quả. 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 quyền truy cập vào Drive.
Bạn chỉ nên yêu cầu quyền truy cập vào các phạm vi cần thiết để truy cập vào API của Google khi người dùng thực hiện một hành động yêu cầu quyền truy cập vào một API cụ thể. 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 nút "Lưu vào Drive".
Bằng cách tách biệt việc uỷ quyền với xác thực, bạn có thể tránh làm người dùng mới cảm thấy choáng ngợp hoặc khiến người dùng nhầm lẫn về lý do họ được yêu cầu cấp một số quyền nhất định.
Để xác thực, bạn nên dùng API Trình quản lý thông tin xác thực. Để uỷ quyền cho các thao tác cần có quyền truy cập vào dữ liệu người dùng do Google lưu trữ, bạn nên sử dụng AuthorizationClient.
Thiết lập dự án
- Mở dự án của bạn trong hoặc tạo một dự án nếu bạn chưa có.
- Trên trang , hãy đảm bảo rằng tất cả thông tin đều đầy đủ và chính xác.
- Đảm bảo rằng ứng dụng của bạn có Tên ứng dụng, Biểu trưng ứng dụng và Trang chủ ứng dụng được chỉ định chính xác. Những giá trị này sẽ được trình bày cho người dùng trên màn hình đồng ý Đăng nhập bằng Google khi đăng ký và màn hình Ứng dụng và dịch vụ bên thứ ba.
- Đảm bảo bạn đã chỉ định URL của chính sách quyền riêng tư và điều khoản dịch vụ của ứng dụng.
- Trong , hãy tạo mã ứng dụng Android cho ứng dụng của bạn nếu bạn chưa có. Bạn sẽ cần chỉ định tên gói và chữ ký SHA-1 của ứng dụng.
- Trong , hãy tạo một mã ứng dụng khách "Ứng dụng web" mới nếu bạn chưa có. Hiện tại, bạn có thể bỏ qua các trường "Nguồn gốc JavaScript được uỷ quyền" và "URI chuyển hướng được uỷ quyền". Mã ứng dụng khách này sẽ được dùng để xác định máy chủ phụ trợ của bạn khi máy chủ này giao tiếp với các dịch vụ xác thực của Google.
Khai báo phần phụ thuộc
Trong tệp build.gradle của mô-đun, hãy khai báo các phần phụ thuộc bằng phiên bản mới nhất của thư viện Dịch vụ nhận dạng của Google.
dependencies {
// ... other dependencies
implementation "com.google.android.gms:play-services-auth:<latest version>"
}
Yêu cầu cấp các quyền cần thiết cho 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 thao tác cần có phạm vi bổ sung, hãy gọi AuthorizationClient.authorize()
.
Ví dụ: nếu người dùng thực hiện một thao tác cần có quyền truy cập vào bộ nhớ ứng dụng Drive, 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 quyền bắt buộc đã được lấy thành công hay chưa. Nếu có, hãy 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);
}
}
Nếu đang truy cập vào các API của Google ở phía máy chủ, bạn có thể gọi phương thức getServerAuthCode() của AuthorizationResult để lấy mã xác thực mà bạn gửi đến phần phụ trợ để đổi lấy mã truy cập và mã làm mới.