

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) 참조하세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Keycloak을 사용하여 Gapwalk OAuth2 인증 구성
<a name="ba-runtime-auth-keycloak"></a>

이 주제에서는 Keycloak을 ID 제공업체(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. 웹 브라우저에서 Keycloak 대시보드로 이동합니다. 기본 자격 증명은 admin/admin입니다. 왼쪽 상단 탐색 모음으로 이동하여 다음 이미지와 같이 **demo** 이름으로 영역을 생성합니다.  
![alt_text](http://docs.aws.amazon.com/ko_kr/m2/latest/userguide/images/ba-runtime-auth-keycloak_2.png)

1. **app-demo**라는 폴더를 생성합니다.  
![도구 모음에 클라이언트 생성 버튼이 강조 표시된 클라이언트 목록 페이지입니다.](http://docs.aws.amazon.com/ko_kr/m2/latest/userguide/images/ba-runtime-auth-keycloak_3.jpg)

   `localhost:8080`을 Gapwalk 애플리케이션의 주소로 바꿉니다.  
![alt_text](http://docs.aws.amazon.com/ko_kr/m2/latest/userguide/images/ba-runtime-auth-keycloak_4.png)  
![alt_text](http://docs.aws.amazon.com/ko_kr/m2/latest/userguide/images/ba-runtime-auth-keycloak_5.png)

1. 클라이언트 보안 암호를 가져오려면 **클라이언트**, **app-demo**, **자격 증명**을 차례로 선택합니다.  
![alt_text](http://docs.aws.amazon.com/ko_kr/m2/latest/userguide/images/ba-runtime-auth-keycloak_6.jpg)

1. **클라이언트**, **클라이언트 범위**, **사전 정의된 매퍼 추가**를 차례로 선택합니다. **영역 역할**을 선택합니다.  
![alt_text](http://docs.aws.amazon.com/ko_kr/m2/latest/userguide/images/ba-runtime-auth-keycloak_7.jpg)

1. 다음 이미지에 표시된 구성으로 영역 역할을 편집합니다.  
![alt_text](http://docs.aws.amazon.com/ko_kr/m2/latest/userguide/images/ba-runtime-auth-keycloak_8.jpg)

1. 정의된 **토큰 클레임 이름**을 기억하세요. `gapwalk-application.security.claimGroupName` 속성에 대한 Gapwalk 설정 정의에 이 값이 필요합니다.  
![alt_text](http://docs.aws.amazon.com/ko_kr/m2/latest/userguide/images/ba-runtime-auth-keycloak_9.jpg)

1. **영역 역할**을 선택하고, **SUPER\_ADMIN**, **ADMIN** 및 **USER**의 세 가지 역할을 생성합니다. 이러한 역할은 나중에 Gapwalk 애플리케이션에 의해 `ROLE_SUPER_ADMIN`, `ROLE_ADMIN` 및 `ROLE_USER`에 매핑되어 일부 제한된 API REST 직접 호출에 액세스할 수 있습니다.  
![alt_text](http://docs.aws.amazon.com/ko_kr/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 및 클라이언트 보안 암호로 바꿉니다.