驗證機制可用來判斷某人的身分 (通常稱為使用者) 註冊或登入。「授權」是授予或拒絕存取權的過程 劃分資料或資源舉例來說,您的應用程式要求使用者同意 存取使用者的 Google 雲端硬碟。
驗證和授權呼叫應彼此獨立且互不相同 根據網站或應用程式需求調整流程
如果您的應用程式有可以使用 Google API 資料的功能,但這些功能並非 做為應用程式核心功能要求時,您必須將應用程式設計為 即便沒有 API 資料,也能妥善處理。例如: 如果使用者尚未授予雲端硬碟權限,您可以隱藏最近儲存的檔案清單 資源存取權
請只要求存取 Google API 所需的範圍存取權 當使用者執行需要存取特定 API 的動作時。適用對象 例如,您應該在使用者每次 使用者輕觸「儲存至雲端硬碟」按鈕。
將授權與驗證功能區隔開來可避免 或清楚說明他們為何要求提供某些資訊 授予其要求的權限。
在 Google 身分識別服務中,是透過 SignInClient. 為了授權動作需要存取 Google 儲存的使用者資料, 建議您使用 AuthorizationClient。
要求使用者動作所需的權限
每當使用者執行需要額外範圍的動作時,
AuthorizationClient.authorize()
。
舉例來說,如果使用者執行的動作需要存取雲端硬碟 應用程式儲存空間,請執行下列步驟:
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));
在活動的 onActivityResult
回呼中,您可以查看必要性
並成功取得權限,接著執行使用者動作。
@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);
}
}