

AWS Mainframe Modernization Service （受管執行期環境體驗） 不再向新客戶開放。對於與 AWS Mainframe Modernization Service （受管執行期環境體驗） 類似的功能，探索 AWS Mainframe Modernization Service （自我管理體驗）。現有客戶可以繼續正常使用該服務。如需詳細資訊，請參閱[AWS 大型主機現代化可用性變更](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 做為身分提供者 (IdP)，為 Gapwalk 應用程式設定 OAuth2 身分驗證。

## 先決條件
<a name="ba-runtime-auth-cognito-prereq"></a>

在本教學課程中，我們將使用 Amazon Cognito 作為 IdP，並使用 PlanetDemo 作為現代化專案。

您可以使用任何其他外部身分提供者。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 Web 金鑰 (JWK) 的 URI，其中包含驗證授權伺服器所發出 JSON Web 簽章的金鑰。

重新導向 URI  
如果授予存取權，授權伺服器重新導向最終使用者的 URI。

## Amazon Cognito 設定
<a name="cog-setup"></a>

首先，我們將建立和設定 Amazon Cognito 使用者集區和使用者，我們將將其與部署的 Gapwalk 應用程式搭配使用，用於測試目的。

**注意**  
如果您使用的是另一個 IdP，則可以略過此步驟。

**建立使用者集區**

1. 前往 中的 Amazon Cognito AWS 管理主控台 ，並使用您的 AWS 登入資料進行身分驗證。

1. 選擇 **User Pools** (使用者集區)。

1. 選擇 **Create a user pool (建立使用者集區)**。

1. 在**設定登入體驗**中，保留 **Cognito 使用者集區**預設提供者類型。您可以選擇一或多個 **Cognito 使用者集區登入選項**；現在，請選擇**使用者名稱**，然後選擇**下一步**。  
![alt_text](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/cog-auth-provider.png)

1. 在**設定安全需求**中，選擇**無 MFA**，保留預設值並停用**多重要素驗證**，然後選擇**下一步**。  
![alt_text](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/cog-sec-requirements.png)

1. 做為安全措施，請停用**啟用自我註冊**，然後選擇**下一步**。  
![alt_text](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/cog-config-sign-up.png)

1. 選擇**使用 Cognito 傳送電子郵件**，然後選擇**下一步**。  
![alt_text](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/cog-email.png)

1. 在**整合您的應用程式**中，指定使用者集區的名稱。在**託管身分驗證頁面**中，選擇**使用 Cognito 託管 UI**。  
![alt_text](http://docs.aws.amazon.com/zh_tw/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/zh_tw/m2/latest/userguide/images/cog-urls.png)

   1. 在**允許的登出 URLs** 中，輸入您希望 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 使用者。在 中導覽至 Amazon Cognito AWS 管理主控台。選擇您建立的使用者集區，然後在**使用者**中選擇**建立使用者**。

在**使用者資訊**中，選擇**傳送電子郵件邀請**、輸入使用者名稱和電子郵件地址，然後選擇**產生密碼**。選擇 **Create user** (建立使用者)。

**角色建立**

在**群組**索引標籤中，建立 3 個群組 (SUPER\_ADMIN、ADMIN 和 USER)，並將您的使用者與一或多個這些群組建立關聯。這些角色稍後會由 Gapwalk 應用程式映射至 ROLE\_SUPER\_ADMIN、ROLE\_ADMIN 和 ROLE\_USER，以便能夠存取一些受限的 API REST 呼叫。

應用程式實作階層式scope-to-role映射，可與多個 OAuth2 身分提供者搭配使用。當 Cognito 發行的 JWT 權杖用於資源伺服器授權時，權杖中定義的範圍會自動對應至對應的角色。

## 將 Amazon Cognito 整合到 Gapwalk 應用程式
<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** 中，您可以找到 {{client-name}} 、 {{client-id}} 和 {{client-secret}} (**顯示用戶端秘密**)。

1. {{region-id}} 對應至您建立 Amazon Cognito 使用者和使用者集區的 AWS 區域 ID。範例：`eu-west-3`。

1. 針對 {{redirect-uri}}，輸入您為**允許回呼 URL** 指定的 URI。在我們的範例中，它是 `http://localhost:8080/planetsdemo/login/oauth2/code/cognito`。

您現在可以部署您的 Gapwalk 應用程式，並使用先前建立的使用者來登入您的應用程式。