

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)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Keycloak 設定 Gapwalk OAuth2 身分驗證
<a name="ba-runtime-auth-keycloak"></a>

本主題說明如何使用 Keycloak 做為身分提供者 (IdP)，為 Gapwalk 應用程式設定 OAuth2 身分驗證。在本教學課程中，我們使用 Keycloak 24.0.0。

## 先決條件
<a name="ba-runtime-auth-keycloak-prereq"></a>
+ [Keycloak](https://www.keycloak.org/)
+ Gapwalk 應用程式

## Keycloak 設定
<a name="keycloak-setup"></a>

1. 前往 Web 瀏覽器中的 Keycloak 儀表板。預設登入資料為 admin/admin。前往左上角導覽列，並建立名稱為 的領域**demo**，如下圖所示。  
![alt_text](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/ba-runtime-auth-keycloak_2.png)

1. 建立名稱為 的用戶端**app-demo**。  
![用戶端清單頁面，工具列中反白顯示建立用戶端按鈕。](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/ba-runtime-auth-keycloak_3.jpg)

   `localhost:8080` 將 取代為 Gapwalk 應用程式的地址  
![alt_text](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/ba-runtime-auth-keycloak_4.png)  
![alt_text](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/ba-runtime-auth-keycloak_5.png)

1. 若要取得您的用戶端秘密，請選擇**用戶端**，然後選擇**應用程式示範**，然後選擇**登入**資料。  
![alt_text](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/ba-runtime-auth-keycloak_6.jpg)

1. 選擇**用戶端**，然後選擇**用戶端範圍**，然後**新增預先定義的映射器**。選擇**領域角色**。  
![alt_text](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/ba-runtime-auth-keycloak_7.jpg)

1. 使用下圖所示的組態編輯您的領域角色。  
![alt_text](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/ba-runtime-auth-keycloak_8.jpg)

1. 記住定義的**權杖宣告名稱**。您將需要在 `gapwalk-application.security.claimGroupName` 屬性的 Gapwalk 設定定義中使用此值。  
![alt_text](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/ba-runtime-auth-keycloak_9.jpg)

1. 選擇 **Realms 角色**，並建立 3 個角色：**ADMIN**、 **SUPER\_ADMIN**和 **USER**。這些角色稍後會由 Gapwalk 應用程式映射至 `ROLE_ADMIN`、 `ROLE_SUPER_ADMIN`和 ，以便能夠存取一些受限`ROLE_USER`的 API REST 呼叫。  
![alt_text](http://docs.aws.amazon.com/zh_tw/m2/latest/userguide/images/ba-runtime-auth-keycloak_10.jpg)

## 將 Keycloak 整合到 Gapwalk 應用程式
<a name="gapwalk-setup"></a>

編輯您的 `application-main.yml` ，如下所示：

```
gapwalk-application.security: enabled
gapwalk-application.security.identity: oauth
gapwalk-application.security.issuerUri: http://<KEYCLOAK_SERVER_HOSTNAME>/realms/<YOUR_REALM_NAME>
gapwalk-application.security.claimGroupName: "keycloak:groups"

gapwalk-application.security.userAttributeName: "preferred_username"
# Use "username" for cognito, 
#     "preferred_username" for keycloak
#      or any other string

spring:
  security:
    oauth2:
      client:
        registration:
          demo:
            client-id: <YOUR_CLIENT_ID>
            client-name: Demo App
            client-secret: <YOUR_CLIENT_SECRET>
            provider: keycloak
            authorization-grant-type: authorization_code
            scope: openid
            redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
        provider:
          keycloak:
            issuer-uri: ${gapwalk-application.security.issuerUri}
            authorization-uri: ${gapwalk-application.security.issuerUri}/protocol/openid-connect/auth
            jwk-set-uri: ${gapwalk-application.security.issuerUri}/protocol/openid-connect/certs
            token-uri: ${gapwalk-application.security.issuerUri}/protocol/openid-connect/token
            user-name-attribute: ${gapwalk-application.security.userAttributeName}
      resourceserver:
        jwt:
          jwk-set-uri: ${gapwalk-application.security.issuerUri}/protocol/openid-connect/certs
```

將 {{<KEYCLOAK\_SERVER\_HOSTNAME>}}、{{<YOUR\_REALM\_NAME>}}、{{<YOUR\_CLIENT\_ID>}} 和 {{<YOUR\_CLIENT\_SECRET>}} 取代為您的 Keycloak 伺服器主機名稱、您的領域名稱、您的用戶端 ID 和您的用戶端秘密。