

AWS 大型机现代化服务（托管运行时环境体验）不再向新客户开放。有关类似于 AWS 大型机现代化服务（托管运行时环境体验）的功能，请浏览 AWS 大型机现代化服务（自我管理体验）。现有客户可以继续正常使用该服务。有关更多信息，请参阅[AWS 大型机现代化可用性变更](https://docs.aws.amazon.com/m2/latest/userguide/mainframe-modernization-availability-change.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Keycloak 配置 Gap OAuth2 walk 身份验证
<a name="ba-runtime-auth-keycloak"></a>

本主题介绍如何使用 Keycloak 作为 OAuth2 身份提供者 (IdP) 为 Gapwalk 应用程序配置身份验证。在本教程中，我们使用 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_cn/m2/latest/userguide/images/ba-runtime-auth-keycloak_2.png)

1. 创建名为 **app-demo** 的客户端。  
![“客户端” 列表页面，工具栏中突出显示了 “创建客户端” 按钮。](http://docs.aws.amazon.com/zh_cn/m2/latest/userguide/images/ba-runtime-auth-keycloak_3.jpg)

   将 `localhost:8080` 替换为您的 Gapwalk 应用程序的地址  
![alt_text](http://docs.aws.amazon.com/zh_cn/m2/latest/userguide/images/ba-runtime-auth-keycloak_4.png)  
![alt_text](http://docs.aws.amazon.com/zh_cn/m2/latest/userguide/images/ba-runtime-auth-keycloak_5.png)

1. 要获取您的客户端密钥，请依次选择**客户端**、**app-demo** 和**凭证**。  
![alt_text](http://docs.aws.amazon.com/zh_cn/m2/latest/userguide/images/ba-runtime-auth-keycloak_6.jpg)

1. 依次选择**客户端**、**客户端作用域**和**添加预定义映射器**。选择**领域角色**。  
![alt_text](http://docs.aws.amazon.com/zh_cn/m2/latest/userguide/images/ba-runtime-auth-keycloak_7.jpg)

1. 使用如下图所示的配置编辑您的领域角色。  
![alt_text](http://docs.aws.amazon.com/zh_cn/m2/latest/userguide/images/ba-runtime-auth-keycloak_8.jpg)

1. 记住已定义的**令牌申领名称**。您需要在 `gapwalk-application.security.claimGroupName` 属性的 Gapwalk 设置定义中使用此值。  
![alt_text](http://docs.aws.amazon.com/zh_cn/m2/latest/userguide/images/ba-runtime-auth-keycloak_9.jpg)

1. 选择**领域角色**，然后创建 3 个角色：**SUPER\_ADMIN**、**ADMIN** 和 **USER**。Gapwalk 应用程序稍后会将这些角色映射到 `ROLE_SUPER_ADMIN`、`ROLE_ADMIN` 和 `ROLE_USER`，以便能够访问一些受限制的 API REST 调用。  
![alt_text](http://docs.aws.amazon.com/zh_cn/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 和客户端密钥。