

AWS Mainframe Modernization Service (マネージドランタイム環境エクスペリエンス) は、新規のお客様に公開されなくなりました。 AWS Mainframe Modernization Service (マネージドランタイム環境エクスペリエンス) と同様の機能については、 AWS Mainframe Modernization Service (セルフマネージドエクスペリエンス) をご覧ください。既存のお客様は、通常どおりサービスを引き続き使用できます。詳細については、[AWS 「 Mainframe Modernization の可用性の変更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)」を参照してください。

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

# Amazon Cognito で Gapwalk OAuth2 認証を設定する
<a name="ba-runtime-auth-cognito"></a>

このトピックでは、Amazon Cognito を ID プロバイダー (IdP) として使用し、Gapwalk アプリケーションに OAuth2 認証を設定する方法について説明します。

## 前提条件
<a name="ba-runtime-auth-cognito-prereq"></a>

このチュートリアルでは、IdP として Amazon Cognito を使用し、モダナイズされたプロジェクトとして PlanetDemo を使用します。

他の外部 ID プロバイダーも使用できます。ClientRegistration 情報は IdP から取得する必要があり、Gapwalk の認証に必要です。詳細については、「[Amazon Cognito デベロッパーガイド](https://docs.aws.amazon.com/cognito/latest/developerguide/)」をご覧ください。

**ClientRegistration 情報:**

client-id  
ClientRegistration の ID。この例では、PlanetsDemo になります。

client-secret  
クライアントシークレット。

認可エンドポイント  
認可サーバーの認可エンドポイント URI。

トークンエンドポイント  
認可サーバーのトークンエンドポイント URI。

jwks エンドポイント  
認可サーバーによって発行された JSON ウェブ署名を検証するためのキーを含む JSON ウェブキー (JWK) の取得に使用される URI。

リダイレクト URI  
アクセスが許可された場合に認可サーバーがエンドユーザーをリダイレクトする URI。

## Amazon Cognito のセットアップ
<a name="cog-setup"></a>

まず、テストの目的でデプロイした Gapwalk アプリケーションで使用する、Amazon Cognito ユーザープールとユーザーを作成して設定します。

**注記**  
他の IdP を使用している場合は、このステップを省略できます。

**ユーザープールを作成する**

1. の Amazon Cognito に移動 AWS マネジメントコンソール し、 AWS 認証情報を使用して認証します。

1. **[ユーザープール]** を選択します。

1. **[ユーザープールを作成]** を選択します。

1. **[サインインエクスペリエンスを設定]** では、**[Cognito ユーザープール]** のデフォルトプロバイダータイプをそのまま使用します。**[Cognito ユーザープールのサインインオプション]** を 1 つまたは複数選択できます。ここでは、**[ユーザー名]** を選択し、**[次へ]** を選択します。  
![alt_text](http://docs.aws.amazon.com/ja_jp/m2/latest/userguide/images/cog-auth-provider.png)

1. **[セキュリティ要件を設定]** では、デフォルトのまま使用します。**[MFA なし]** を選択して **[多要素認証]** を無効にし、**[次へ]** を選択します。  
![alt_text](http://docs.aws.amazon.com/ja_jp/m2/latest/userguide/images/cog-sec-requirements.png)

1. セキュリティ対策として **[自己登録を有効化]** を無効にして、**[次へ]** を選択します。  
![alt_text](http://docs.aws.amazon.com/ja_jp/m2/latest/userguide/images/cog-config-sign-up.png)

1. **[Cognito で E メールを送信]** を選択し、**[次へ]** を選択します。  
![alt_text](http://docs.aws.amazon.com/ja_jp/m2/latest/userguide/images/cog-email.png)

1. **[アプリケーションを統合]** で、ユーザープールの名前を指定します。**[ホストされた認証ページ]** で、**[Cognito でホストされた UI を使用]** を選択します。  
![alt_text](http://docs.aws.amazon.com/ja_jp/m2/latest/userguide/images/cog-domain.png)

1. わかりやすくするために、**[ドメイン]** で **[Cognito ドメインを使用する]** を選択し、ドメインプレフィックス (例: `https://planetsdemo`) を入力します。デモアプリケーションはクライアントとして追加する必要があります。

   1. **[最初のアプリケーションクライアント]** で **[秘密クライアント]** を選択します。アプリのクライアント名 (**planetsdemo** など) を入力し、**[クライアントのシークレットを生成する]** を選択します。

   1. **[許可されているコールバック URL]** に、認証後にユーザーをリダイレクトする URL を入力します。URL は `/login/oauth2/code/cognito` で終わる必要があります。例えば、このアプリケーションおよびバックエンドの Gapwalk と BAC アプリケーションの場合は次のようになります:

      ```
      http://localhost:8080/bac
            http://localhost:8080/bac/login/oauth2/code/cognito
            http://localhost:8080/gapwalk-application
            http://localhost:8080/gapwalk-application/login/oauth2/code/cognito
            http://localhost:8080/planetsdemo
            http://localhost:8080/planetsdemo/login/oauth2/code/cognito
      ```

      URL は後で編集できます。  
![alt_text](http://docs.aws.amazon.com/ja_jp/m2/latest/userguide/images/cog-urls.png)

   1. **[許可されているサインアウト URL]** に、アプリケーションがユーザーをサインアウトする際の、Amazon Cognito によるリダイレクト先のページの URL を入力します。例えば、バックエンドの Gapwalk と BAC アプリケーションの場合は次のようになります:

      ```
      http://localhost:8080/bac/logout
      http://localhost:8080/gapwalk-application/logout
      http://localhost:8080/planetsdemo/logout
      ```

      URL は後で編集できます。

   1. **[高度なアプリケーションクライアントの設定]** と **[属性の読み込みおよび書き込みアクセス権限]** セクションはデフォルト値のままにします。

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

1. **[確認して作成]** で、選択を確認し、**[ユーザープールを作成]** を選択します。

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

**ユーザーの作成**

自己登録は無効になっているので、Amazon Cognito ユーザーを作成します。 AWS マネジメントコンソールの Amazon Cognito コンソールに移動します。作成したユーザープールを選択し、**[ユーザー]** で **[ユーザーを作成]** を選択します。

**[ユーザー情報]** で、**[E メールで招待を送信]** を選択し、ユーザー名とメールアドレスを入力して、**[パスワードの生成]** を選択します。**[ユーザーの作成]** を選択します。

**ロールの作成**

**[グループ]** タブで、3 つのグループ (SUPER\_ADMIN、ADMIN、USER) を作成し、ユーザーをこれらのグループの 1 つ以上に関連付けます。これらのロールは、後に Gapwalk アプリケーションによって ROLE\_SUPER\_ADMIN、ROLE\_ADMIN、および ROLE\_USER にマッピングされます。これで、アクセスが制限された API REST の呼び出しが可能になります。

アプリケーションは、複数の OAuth2 ID プロバイダーで動作する階層scope-to-roleマッピングを実装します。Cognito によって発行された JWT トークンがリソースサーバーの認可に使用されると、トークンで定義されたスコープは自動的に対応するロールにマッピングされます。

## Gapwalk アプリケーションへの Amazon Cognito の統合
<a name="integrate-cognito"></a>

Amazon Cognito ユーザープールとユーザーの準備ができたので、モダナイズしたアプリケーションの `application-main.yml` ファイルに移動し、次のコードを追加します。

```
gapwalk-application.security: enabled
gapwalk-application.security.identity: oauth
gapwalk-application.security.issuerUri: https://cognito-idp.<region-id>.amazonaws.com/<pool-id>
gapwalk-application.security.domainName: <your-cognito-domain>

spring:
  security:
    oauth2:
      client:
        registration:
          cognito:
            client-id: <client-id>
            client-name: <client-name>
            client-secret: <client-secret>
            provider: cognito
            authorization-grant-type: authorization_code
            scope: openid
            redirect-uri: "<redirect-uri>"
        provider:
          cognito:
            issuer-uri: ${gapwalk-application.security.issuerUri}
            authorization-uri: ${gapwalk-application.security.domainName}/oauth2/authorize
            jwk-set-uri: ${gapwalk-application.security.issuerUri}/.well-known/jwks.json
            token-uri: ${gapwalk-application.security.domainName}/oauth2/token
            user-name-attribute: username
      resourceserver:
        jwt:
          jwk-set-uri: ${gapwalk-application.security.issuerUri}/.well-known/jwks.json
```

説明に従って、次のプレースホルダーを置き換えます。

1. の Amazon Cognito に移動 AWS マネジメントコンソール し、 AWS 認証情報を使用して認証します。

1. **[ユーザープール]** を選択して、作成したユーザープールを選択します。{{プール ID}} は、**[ユーザープール ID]** にあります。

1. **[アプリケーションの統合]** を選択し、{{your-cognito-domain}} を検索して、**[アプリクライアントと分析]** に移動してアプリを選択します。

1. **[アプリケーションクライアント: yourApp]** では、{{クライアント名}}、{{クライアント ID}}、{{クライアントシークレット}} (**[クライアントシークレットを表示]**) を確認できます。

1. {{region-id}} は、Amazon Cognito ユーザーとユーザープールを作成した AWS リージョン ID に対応します。例えば、`eu-west-3` などです。

1. {{redirect-uri}} には、**許可されているコールバック URL** に指定した URI を入力します。今回の例では、`http://localhost:8080/planetsdemo/login/oauth2/code/cognito` となります。

これで Gapwalk アプリケーションをデプロイし、以前に作成したユーザーを使用してアプリケーションにサインインできます。