Tutorials & Tips/WSO2 Identity Server

2-1-1. OIDC 연동 - JDK 1.8

PHAROS IAM 2022. 4. 28. 10:44

jdk1.8.zip
2.14MB

 

이번 게시글은 JDK 기반의 어플리케이션을 WSO2와 연동하여 OIDC 프로토콜 기반의 로그인을 진행하기 위한 과정입니다. JDK 버전별로 제공된 파일은 일부 내용이 상이하나, 연결과정은 같습니다. 해당 게시글에서는 JDK 1.8 기준 샘플소스 기반으로 작성되었으며, 예제 실행 환경은 다음과 같습니다.

 

- JDK 1.8

- Apache Tomcat 8.5

- WSO2 IS 5.11, 샘플 소스 : 가상환경 내 구축 (wso2.my.com)

 

1. 샘플 소스 구성

해당 소스는 WEB-INF/classes/settings.properties 파일을 설정값으로 받아 각각의 jsp의 해당 설정값을 넘겨 Map 객체로 생성 후, 해당 객체를 통해 URL을 생성하여 로그인을 진행하는 방식으로 구성되어 있습니다. 주요 구성은 다음과 같습니다.

1-1. 주요 구성

주요 파일명 기능
login.jsp 로그인을 진행시키는 페이지입니다.
main.jsp 메인페이지입니다. 로그인 성공 시 사용자 정보가 화면에 출력됩니다.
redirect.jsp 로그인 후 호출되는 페이지로, 받아온 사용자의 정보를 브라우저 세션에 저장합니다.
refresh.jsp Access token / Refresh token 값을 갱신합니다.
settings.properties 연결에 필요한 정보가 입력된 파일입니다.
SSOAuth.java 로그인과정을 수행해줄 로직이 작성된 파일입니다.
pharosinfo_sso-1.1.0-j8.jar 파일은 해당 파일을 참조하여 생성되었습니다.

 

1-2. 라이브러리 구성

라이브러리명 기능
pharosinfo_sso-1.1.0-j8.jar  SSO login, JWT 검증, Response 체크 등을 수행합니다.
gson-2.8.7.jar Java Object를 Json 문자열로 변환시킵니다.
commons-logging-1.2.jar HTTP 요청을 핸들링합니다.
httpclient-4.5.13.jar
httpcore-4.4.14.jar
httpcore-nio-4.4.14.jar
httpmime-4.5.13.jar
nimbus-jose-jwt-9.1.2.jar  JWT를 생성 및 검증합니다.
unirest-java-3.11.11.jar  HTTP 통신 클라이언트 라이브러리, GET / POST 요청을 수행합니다.

 

2. Service Provider 등록

2-1. 생성

<그림 1> Service Provider - Add

먼저, WSO2 의 콘솔로 접근하여 Service Provider (이하 SP) 를 등록해줍니다.

해당 과정에서는 SP를 등록하여 Client ID / Secret 값을 발급받아야 합니다.

 

사진과 같이, 콘솔 좌측의 표시된 부분인 Service Providers - Add를 클릭하면 그림과 같은 창이 나타나는데,

이후 예제로 사용할 이름을 입력해준 뒤, Register를 클릭해 해당 SP를 등록해줍니다.

 

2-2. 조회

<그림 2> Service Provider - List

이후 List를 클릭하면 다음과 같이 SP가 등록된걸 확인할 수 있는데, 이후 Edit를 눌러 해당 SP의 설정탭에 접근합니다.

 

2-3. 수정

<그림 3> Service  Provider  - Edit (좌) / <그림 4> OAuth/OpenID Configuration (우)

기타 설정은 수정하지 않고, 하단의 Inbound Authentication Configuration - OAuth/OpenID Connect Configuration 탭의 Configure를 클릭해주면 우측 사진과 같은 화면이 출력되는데, 하단의 'Callback Url' 탭에 리다이렉트 할 URL을 작성해줍니다. 해당 예제에서는 "http://wso2.my.com:8080/jdk1.8/redirect.jsp" 를 입력해 주었습니다.

 

 

<그림 5> Client Key, Client Secret

이후 설정값을 저장하면 다음과 같이 Client Key, Secret값이 발급됩니다.

 

 

3. 샘플 소스 수정

3-1. 설정값 변경 (settings.properties)

다음으로, 샘플 어플리케이션 내의 설정값을 수정해야 합니다.

먼저, 어플리케이션을 <TOMCAT_DIR>/webapps에 설치해준 이후, <APP_NAME>/WEB-INF/settings.properties 파일의 설정값을 변경해줍니다.

 

<그림 6> settings.properties 설정 예시
변수명 변경사항
URI.Check
IDP의 역할을 수행하는 WSO2와 연관됩니다.
URL의 path는 변경하지 않고 host만 변경합니다.
URI.Authorize
URI.TokenTarget
URI.Jwks
SP.ClientId
2-3. 수정 단계에서 발급받은 'Client ID / Client Secret' 을 토대로 작성합니다.
SP.ClientSecret
URI.Redirect
2-3. 수정 단계에서 입력해준 'Callback Url' 을 토대로 작성합니다.
URI.Main
해당 소스에서 메인페이지로 사용할 페이지를 지정해줍니다.
해당 예제에서는 main.jsp를 사용합니다.

 

4. 실행

4-1. 메인페이지 접속

<그림 7> 최초 접근시 화면 (main.jsp)

샘플로 사용할 SP를 WSO2 내에 등록하였고, 어플리케이션 또한 설정값을 바꿔주었다면 본인이 설정한 도메인 주소로 접근했을 때 다음과 같은 화면이 나타납니다.

 

4-2. 로그인

<그림 8> 로그인 화면 (좌) / <그림 9> 로그인 이후 접근권한 허용여부 확인창 (우)

 

여기서 로그인을 진행하고 접근권한에 관한 창에서 'Allow' 를 클릭하면 로그인과정이 진행되게 됩니다.

 

4-3. 로그인 확인

<그림 10> 로그인 화면 예시 (좌) / <그림 11> https://jwt.io/ 활용 예시 (우)

 

과정이 정상적으로 진행되었다면, 다음과 같이 사용자 계정 정보가 나타난 화면을 확인할 수 있습니다. 이 중 ID Token값은 인코딩된 사용자의 로그인 정보에 해당하며, https://jwt.io/ 에 접속해서 <그림 11> 과 같이 디코딩된 값을 확인할 수 있습니다.