アイデンティティプール IdP として Apple でサインインを設定する - Amazon Cognito

アイデンティティプール IdP として Apple でサインインを設定する

Amazon Cognito アイデンティティプールは「Apple でサインイン」と統合して、モバイルアプリケーションとウェブアプリケーションのユーザーにフェデレーション方式の認証を提供します。このセクションでは、ID プロバイダー (IdP) として「Apple でサインイン」を使用してアプリケーションを登録し、セットアップする方法について説明します。

認証プロバイダーとして「Apple でサインイン」を ID プールに追加するには、2 つのステップが必要です。まず、アプリケーションで「Apple でサインイン」を統合し、次に ID プールで「Apple でサインイン」を設定します。「Apple でサインイン」の設定に関する最新の情報については、Apple デベロッパー向けドキュメントの「Apple でサインインの環境を設定する」を参照してください。

「Apple でサインイン」を設定する

IdP として「Apple でサインイン」を設定するには、クライアント ID を受け取るためにアプリケーションを Apple に登録する必要があります。

  1. Apple の開発者アカウントを作成します。

  2. Apple 認証情報を使用してサインインします。

  3. 左のナビゲーションペインで、[Certificates, IDs & Profiles (証明書、ID & プロファイル)] を選択します。

  4. 左のナビゲーションペインで、[Identifiers (識別子)] を選択します。

  5. [Identifiers (識別子)] ページで、[+] アイコンを選択します。

  6. [Register a New Identifier] (新しい識別子の登録) ページで、[App IDs] (アプリ ID)、[Continue] (続行) の順に選択します。

  7. [Register an App ID] ページで、次の操作を行います。

    1. [説明] に、説明を入力します。

    2. [Bundle ID (バンドル ID)] に、識別子を入力します。このバンドル ID を書き留めておきます。Apple を ID プールのプロバイダーとして設定するには、この値が必要になります。

    3. [Capabilities] (機能) で、[Sign In with Apple] (Apple でサインイン) を選択してから [Edit] (編集) を選択します。

    4. [Sign in with Apple: App ID Configuration] (Apple でサインイン: アプリ ID の設定) ページで、アプリの適切な設定を選択します。次に、[Save] (保存) を選択します。

    5. [Continue] (続行) をクリックします。

  8. [Confirm your App ID] ページで、[登録] を選択します。

  9. 「Apple でサインイン」をネイティブ iOS アプリケーションと統合する場合は、ステップ 10 に進みます。ステップ 11 は、「Apple JS でサインイン」と統合するアプリケーション用です。

  10. [ID] ページで、[App IDs] (アプリケーション ID) メニューを選択し、次に [Services IDs] (サービス ID) を選択します。[+] アイコンを選択します。

  11. [Register a New Identifier] (新しい識別子の登録) ページで、[Services IDs] (サービス ID)、[Continue] (続行) の順に選択します。

  12. [Register a Services ID] ページで、次の操作を行います。

    1. [説明] に、説明を入力します。

    2. [Identifier] に、識別子を入力します。このサービス ID を書き留めておきます。Apple を ID プールのプロバイダーとして設定するには、この値が必要になります。

    3. [Apple でサインイン] を選択後、[Configure (設定)] を選択します。

    4. [Web Authentication Configuration] ページで、[Primary App ID] を選択します。[Website URLs] (ウェブサイトの URL) で、[+] アイコンを選択します。[Domains and Subdomains (ドメインとサブドメイン)] で、アプリのドメイン名を入力します。[リターン URL] に、ユーザーが「Apple でサインイン」を介して認証した後、認可によってユーザーがリダイレクトされるコールバック URL を入力します。

    5. [Next] を選択します。

    6. [Continue] (続行) を選択し、[Register] (登録) を選択します。

  13. 左のナビゲーションペインで [Keys (キー)] を選択します。

  14. [Keys (キー)] ページで、[+] アイコンを選択します。

  15. [Register a New Key] ページで、次の操作を行います。

    1. [Key Name] に、キー名を入力します。

    2. [Sign In with Apple] (Apple でサインイン) を選択後、[Configure] (設定) を選択します。

    3. [Configure Key (キーの設定)] ページで、[Primary App ID (プライマリアプリ ID)]、[Save (保存)] の順に選択します。

    4. [Continue] (続行) を選択し、[Register] (登録) を選択します。

注記

Apple でサインインをネイティブ iOS アプリケーションに統合するには、「Apple でサインインしてユーザー認証を実装する」を参照してください。

ネイティブ iOS 以外のプラットフォームで「Apple でサインイン」を統合する方法については、「Apple JS でサインイン」を参照してください。

Amazon Cognito フェデレーティッド ID コンソールで外部プロバイダーを設定する

以下の手順を使用して、外部プロバイダーを設定します。

Apple ID プロバイダー (IdP) を使ってサインインを追加するには
  1. Amazon Cognito コンソール[ID プールの管理] をクリックします。アイデンティティプールを選択します。

  2. [ユーザーアクセス] タブを選択します。

  3. [ID プロバイダーを追加] を選択します。

  4. [Apple でサインイン] を選択します。

  5. Apple Developer で作成した OAuth プロジェクトのサービス ID を入力します。詳細については、Apple でサインインのドキュメントの「Apple でサインインを使用してユーザーを認証する」を参照してください。

  6. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときにリクエストするロールを設定するには、[ロール設定] を設定します。

    1. その IdP のユーザーに、認証済みロールを設定したときに設定したデフォルトロールを割り当てることも、ルール付きのロールを選択することもできます。

      1. [ルールを使用してロールを選択する] を選択した場合、ユーザー認証からのソースクレーム、クレームを比較するオペレータ、このロール選択と一致するおよびロール割り当てが一致したときに割り当てるロールを入力します。別の条件に基づいて追加のルールを作成するには、[別のものを追加] を選択します。

      2. [ロールの解決] を選択します。ユーザーのクレームがルールに合わない場合は、認証情報を拒否するか、認証済みロールの認証情報を発行できます。

  7. Amazon Cognito がこのプロバイダーで認証されたユーザーに認証情報を発行するときに割り当てるプリンシパルタグを変更するには、[アクセスコントロールの属性] を設定します。

    1. プリンシパルタグを適用しない場合は、[非アクティブ] を選択します。

    2. sub および aud クレームに基づいてプリンシパルタグを適用するには、[デフォルトマッピングを使用] を選択します。

    3. プリンシパルタグへの属性の独自のカスタムスキーマを作成するには、[カスタムマッピングを使用] を選択します。次に、タグに表示したい各クレームから取得するタグキーを入力します。

  8. [変更を保存] を選択します。

Amazon Cognito フェデレーティッド ID で Apple をプロバイダーとして Apple でサインインするための CLI 例

この例では、IdP として Apple でサインインする MyIdentityPool という名前の ID プールを作成します。

aws cognito-identity create-identity-pool --identity-pool-name MyIdentityPool --supported-login-providers appleid.apple.com="sameple.apple.clientid"

詳細については、「ID プールの作成」を参照してください。

Amazon Cognito アイデンティティ ID を生成する

この例では、Amazon Cognito ID を生成 (または取得) します。これはパブリック API なので、この API を呼び出すために認証情報は必要ありません。

aws cognito-identity get-id --identity-pool-id SampleIdentityPoolId --logins appleid.apple.com="SignInWithAppleIdToken"

詳細については、「get-id」を参照してください。

Amazon Cognito アイデンティティ ID の認証情報を取得する

この例では、指定された ID および 「Apple でサインイン」のログインの認証情報を返します。これはパブリック API なので、この API を呼び出すために認証情報は必要ありません。

aws cognito-identity get-credentials-for-identity --identity-id SampleIdentityId --logins appleid.apple.com="SignInWithAppleIdToken"

詳細については、「get-credentials-for-identity」を参照してください。

Apple でサインインを使用する: Android

Apple では、Android 版の 「Apple でサインイン」をサポートする SDK を提供していません。代わりにウェブビューでウェブフローを使用できます。

「Apple でサインイン」は、その状態の追跡にセッションオブジェクトを使用します。Amazon Cognito は、このセッションオブジェクトからの ID トークンを使用してユーザーの認証と固有識別子の生成を行い、必要に応じて他の AWS リソースへのアクセス権をユーザーに付与します。

@Override public void onSuccess(Bundle response) { String token = response.getString("id_token"); Map<String, String> logins = new HashMap<String, String>(); logins.put("appleid.apple.com", token); credentialsProvider.setLogins(logins); }

「Apple でサインインを使用する」: iOS-Objective-C

Apple は、ネイティブ iOS アプリケーションでの「Apple でサインイン」の SDK サポートを提供しました。ネイティブ iOS デバイスで「Apple でサインイン」を使用してユーザー認証を実装するには、Apple のドキュメントで「「Apple でサインイン」を使用したユーザー認証の実装」を参照してください。

Amazon Cognito は、ID トークンを使用してユーザーの認証と固有識別子の生成を行い、必要に応じて他の AWS リソースへのアクセス権をユーザーに付与します。

(void)finishedWithAuth: (ASAuthorizationAppleIDCredential *)auth error: (NSError *) error { NSString *idToken = [ASAuthorizationAppleIDCredential objectForKey:@"identityToken"]; credentialsProvider.logins = @{ "appleid.apple.com": idToken }; }

「Apple でサインイン」: iOS - Swift

Apple は、ネイティブ iOS アプリケーションでの「Apple でサインイン」の SDK サポートを提供しました。ネイティブ iOS デバイスで「Apple でサインイン」を使用してユーザー認証を実装するには、Apple のドキュメントで「「Apple でサインイン」を使用したユーザー認証の実装」を参照してください。

Amazon Cognito は、ID トークンを使用してユーザーの認証と固有識別子の生成を行い、必要に応じて他の AWS リソースへのアクセス権をユーザーに付与します。

iOS で「Apple でサインイン」を設定する方法についての詳細は、「Apple でサインインを設定する」を参照してください。

func finishedWithAuth(auth: ASAuthorizationAppleIDCredential!, error: NSError!) { if error != nil { print(error.localizedDescription) } else { let idToken = auth.identityToken, credentialsProvider.logins = ["appleid.apple.com": idToken!] } }

「Apple でサインイン」を使用する: JavaScript

Apple では、JavaScript 用の「Apple でサインイン」をサポートする SDK は提供していません。代わりにウェブビューでウェブフローを使用できます。

「Apple でサインイン」は、その状態の追跡にセッションオブジェクトを使用します。Amazon Cognito は、このセッションオブジェクトからの ID トークンを使用してユーザーの認証と固有識別子の生成を行い、必要に応じて他の AWS リソースへのアクセス権をユーザーに付与します。

function signinCallback(authResult) { // Add the apple's id token to the Amazon Cognito credentials login map. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { 'appleid.apple.com': authResult['id_token'] } }); // Obtain AWS credentials AWS.config.credentials.get(function(){ // Access AWS resources here. }); }

「Apple でサインイン」を使用する: Xamarin

Xamarin 用の「Apple でサインイン」をサポートする SDK はありません。代わりにウェブビューでウェブフローを使用できます。

「Apple でサインイン」は、その状態の追跡にセッションオブジェクトを使用します。Amazon Cognito は、このセッションオブジェクトからの ID トークンを使用してユーザーの認証と固有識別子の生成を行い、必要に応じて他の AWS リソースへのアクセス権をユーザーに付与します。

トークンを取得したら、CognitoAWSCredentials で設定できます。

credentials.AddLogin("appleid.apple.com", token);