Android でユーザーデータへのアクセスを承認する

認証とは、ユーザーが誰であるかを確立し、一般にユーザーと呼ばれること 。認可とは、アクセスを付与または拒否するプロセス アクセスを制限することです。たとえば、お客様のアプリは、 ユーザーの Google ドライブにアクセスする。

認証と認可の呼び出しは、2 つの異なる別個の別個のものにする必要がある サイトまたはアプリのニーズに基づいて アプリフローを管理できます

Google API データを使用できる機能がアプリにあるが、 含まれていない場合は、 API データにアクセスできないケースを適切に処理できます。たとえば ユーザーが Google ドライブにドライブへのアクセス権を付与していない場合、最近保存したファイルのリストを非表示にすることができます。 できます。

Google API にアクセスするために必要なスコープへのアクセスのみをリクエストする必要があります。 ユーザーが特定の API へのアクセスを必要とするアクションを実行したとき。対象 たとえば、ユーザーがアクセスしようとしたときに、 ユーザーが [ドライブに保存] をタップ] ボタンを離します。

認可と認証を分離することで、新しい認証プロセスに過剰な負荷をかける なぜ特定の機能を要求されるのかについて、ユーザーに混乱を生じさせる 付与できます。

Google Identity Services では、 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);
  }
}