

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# アイデンティティプール IdP として Apple でサインインを設定する
<a name="apple"></a>

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

認証プロバイダーとして「Apple でサインイン」を ID プールに追加するには、2 つのステップが必要です。まず、アプリケーションで「Apple でサインイン」を統合し、次に ID プールで「Apple でサインイン」を設定します。「Apple でサインイン」の設定に関する最新の情報については、Apple デベロッパー向けドキュメントの「[Apple でサインインの環境を設定する](https://developer.apple.com/documentation/signinwithapple/configuring-your-environment-for-sign-in-with-apple)」を参照してください。

## 「Apple でサインイン」を設定する
<a name="login-with-apple-setup"></a>

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

1. [Apple の開発者アカウント](https://developer.apple.com/programs/enroll/)を作成します。

1. Apple 認証情報を使用して[サインイン](https://developer.apple.com/account/#/welcome)します。

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

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

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

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

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

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

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

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

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

   1. [**続行**] をクリックしてください。

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

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

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

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

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

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

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

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

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

   1. [**次へ**] を選択します。

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

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

1. [**Keys (キー)**] ページで、[**\$1**] アイコンを選択します。

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

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

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

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

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

**注記**  
Apple でサインインをネイティブ iOS アプリケーションに統合するには、「[Apple でサインインしてユーザー認証を実装する](https://developer.apple.com/documentation/authenticationservices/implementing-user-authentication-with-sign-in-with-apple)」を参照してください。  
ネイティブ iOS 以外のプラットフォームで「Apple でサインイン」を統合する方法については、「[Apple JS でサインイン](https://developer.apple.com/documentation/signinwithapplejs/)」を参照してください。

## Amazon Cognito フェデレーティッド ID コンソールで外部プロバイダーを設定する
<a name="login-with-apple-configure-provider"></a>

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

**Apple ID プロバイダー (IdP) を使ってサインインを追加するには**

1. [Amazon Cognito コンソール](https://console.aws.amazon.com/cognito/home)で **[ID プールの管理]** をクリックします。アイデンティティプールを選択します。

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

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

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

1. [Apple Developer](https://developer.apple.com) で作成した OAuth プロジェクトの**サービス ID** を入力します。詳細については、*Apple でサインイン*のドキュメントの「[Apple でサインインを使用してユーザーを認証する](https://developer.apple.com/documentation/signinwithapple/authenticating-users-with-sign-in-with-apple)」を参照してください。

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

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

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

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

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

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

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

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

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

## Amazon Cognito フェデレーティッド ID で Apple をプロバイダーとして Apple でサインインするための CLI 例
<a name="sign-in-with-apple-cli-examples"></a>

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

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

 詳細については、「[ID プールの作成](https://docs.aws.amazon.com/cli/latest/reference/cognito-identity/create-identity-pool.html)」を参照してください。

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

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

詳細については、「[get-id](https://docs.aws.amazon.com/cli/latest/reference/cognito-identity/get-id.html)」を参照してください。

**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](https://docs.aws.amazon.com/cli/latest/reference/cognito-identity/get-credentials-for-identity.html)」を参照してください。

## Apple でサインインを使用する: Android
<a name="set-up-apple-1.android"></a>

Apple では、Android 版の 「Apple でサインイン」をサポートする SDK を提供していません。代わりにウェブビューでウェブフローを使用できます。
+ アプリケーションで「Apple でサインイン」を設定するには、Apple のドキュメントの「[「Apple でサインイン」するためのウェブページの設定](https://developer.apple.com/documentation/signinwithapple/configuring-your-webpage-for-sign-in-with-apple)」を参照してください。
+ Android ユーザーインターフェイスに **[Apple でサインイン]** ボタンを追加するには、Apple ドキュメントの「[ウェブ上に [Appleでサインイン] ボタンを表示する](https://developer.apple.com/documentation/signinwithapple/displaying-sign-in-with-apple-buttons-on-the-web)」に従ってください。
+ 「Apple でサインイン」を使用してユーザーを安全に認証するには、Apple のドキュメントの「[Apple でサインインするためのウェブページの設定](https://developer.apple.com/documentation/signinwithapple/authenticating-users-with-sign-in-with-apple)」を参照してください。

「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
<a name="set-up-apple-1.ios-objc"></a>

Apple は、ネイティブ iOS アプリケーションでの「Apple でサインイン」の SDK サポートを提供しました。ネイティブ iOS デバイスで「Apple でサインイン」を使用してユーザー認証を実装するには、Apple のドキュメントで「[「Apple でサインイン」を使用したユーザー認証の実装](https://developer.apple.com/documentation/authenticationservices/implementing-user-authentication-with-sign-in-with-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
<a name="set-up-apple-1.ios-swift"></a>

Apple は、ネイティブ iOS アプリケーションでの「Apple でサインイン」の SDK サポートを提供しました。ネイティブ iOS デバイスで「Apple でサインイン」を使用してユーザー認証を実装するには、Apple のドキュメントで「[「Apple でサインイン」を使用したユーザー認証の実装](https://developer.apple.com/documentation/authenticationservices/implementing-user-authentication-with-sign-in-with-apple)」を参照してください。

Amazon Cognito は ID トークンを使用してユーザーを認証し、一意の識別子を生成し、必要に応じてユーザーに他の AWS リソースへのアクセスを許可します。

iOS で「Apple でサインイン」を設定する方法についての詳細は、「[Apple でサインインを設定する](https://docs.amplify.aws/sdk/auth/federated-identities/q/platform/ios#set-up-sign-in-with-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
<a name="set-up-apple-1.javascript"></a>

Apple では、JavaScript 用の「Apple でサインイン」をサポートする SDK は提供していません。代わりにウェブビューでウェブフローを使用できます。
+ アプリケーションで「Apple でサインイン」を設定するには、Apple のドキュメントの「[「Apple でサインイン」するためのウェブページの設定](https://developer.apple.com/documentation/signinwithapple/configuring-your-webpage-for-sign-in-with-apple)」を参照してください。
+ JavaScript ユーザーインターフェイスに **[Apple でサインイン]** ボタンを追加するには、Apple ドキュメントの「[ウェブ上に [Appleでサインイン] ボタンを表示する](https://developer.apple.com/documentation/signinwithapple/displaying-sign-in-with-apple-buttons-on-the-web)」に従ってください。
+ 「Apple でサインイン」を使用してユーザーを安全に認証するには、Apple のドキュメントの「[Apple でサインインするためのウェブページの設定](https://developer.apple.com/documentation/signinwithapple/authenticating-users-with-sign-in-with-apple)」を参照してください。

「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.
     });
}
```