

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>

이 자습서에서는 Amazon Cognito를 IdP로 사용하고 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 Management Console 인증합니다.

1. **사용자 풀(User Pools)**을 선택합니다.

1. **사용자 풀 생성**을 선택합니다.

1. **로그인 환경 구성에서** **Cognito 사용자** 풀 기본 공급자 유형을 유지합니다. **Cognito 사용자 풀 로그인 옵션**을 하나 또는 여러 개 선택할 수 있습니다. 지금은 **사용자 이름을** 선택한 후 **다음**을 선택합니다.  
![alt_text](http://docs.aws.amazon.com/ko_kr/m2/latest/userguide/images/cog-auth-provider.png)

1. **보안 요구 사항 구성**에서 기본값을 유지하고 **MFA 없음**을 선택하여 **다단계 인증**을 비활성화하고 **다음**을 선택합니다.  
![alt_text](http://docs.aws.amazon.com/ko_kr/m2/latest/userguide/images/cog-sec-requirements.png)

1. 보안 조치로 **셀프 등록 사용**을 비활성화하고 **다음**을 선택합니다.  
![alt_text](http://docs.aws.amazon.com/ko_kr/m2/latest/userguide/images/cog-config-sign-up.png)

1. **Cognito를 사용하여 이메일 전송**을 선택한 다음 **다음**을 선택합니다.  
![alt_text](http://docs.aws.amazon.com/ko_kr/m2/latest/userguide/images/cog-email.png)

1. **앱 통합**에서 사용자 풀의 이름을 선택합니다. **호스팅된 인증 페이지**에서 **Cognito 호스팅 UI 사용**을 선택합니다.  
![alt_text](http://docs.aws.amazon.com/ko_kr/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/ko_kr/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 Management Console에서 Amazon Cognito 콘솔로 이동합니다. 만든 사용자 풀을 선택한 다음 **사용자**에서 **사용자 생성**을 선택합니다.

**사용자 정보**에서 **이메일 초대 보내기**를 선택하고 사용자 이름과 이메일 주소를 입력한 다음 **비밀번호 생성**을 선택합니다. **사용자 생성**을 선택합니다.

**역할 생성**

**그룹** 탭에서 3개의 그룹(SUPER\_ADMIN, ADMIN 및 USER)을 생성하고 사용자를 이러한 그룹 중 하나 이상에 연결합니다. 이러한 역할은 나중에 Gapwalk 애플리케이션에서 ROLE\_SUPER\_ADMIN, ROLE\_ADMIN 및 ROLE\_USER에 매핑되어 일부 제한된 API REST 직접 호출에 액세스할 수 있도록 합니다.

애플리케이션은 여러 OAuth2 자격 증명 공급자와 함께 작동하는 계층적 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 Management Console 인증합니다.

1. **사용자 풀**을 선택하고 생성한 사용자 풀을 선택합니다. **사용자 풀 ID**에서 {{pool-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 애플리케이션을 배포하고 이전에 생성한 사용자를 사용하여 앱에 로그인할 수 있습니다.