Dev

[SSO] Keycloak 공식문서 따라해보기 - 3

VIPeveloper 2020. 9. 25. 17:00
728x90
반응형

1. 서론

Keycloak 번역작업도 거의 끝나간다. 생각보다 기본기를 탄탄히 가져갈 수 있었던 좋은 경험이다.

이번 시간에는 간단한 앱을 활용해서 keycloak의 기능을 활용해보려 한다.

2. 본론

이제 우리는 어드민 계정, realm, 사용자의 개념을 학습하였습니다. 우리는 Keycloak을 이용해서 WildFly Servlet 앱을 보안으로 활용할 수 있습니다. WildFly 클라이언트 어뎁터를 설치하고, 해당 앱을 어드민 콘솔에 등록하고, WildFly 인스턴스를 Keycloak 관리대상에 포함시킬 수 있고, 앱을 보호하는데 사용할 수 있습니다.

2.1 키클럭을 이용하여 포트 조절하기

키클록 서버로서 같은 공간에 WildFly를 사용할 수 있도록 합니다. 이 상황에서, WildFly를 앱 컨테이너로 사용할 수 있게 합니다. 우리는 반드시 분리된 WildFly 인스턴스를 서블릿 앱을 위해 가지고 있어야 합니다.

음... 각각의 독립된 컨테이너 공간 내에 키클록을 사용하라는 말 같습니다. 분리된 환경으로 포트 충돌을 방어해라!라는 말 같은데, 일단 계속 가보죠.

포트 충돌을 방지하기 위해, 키클락과 wildFly를 구동시키기 위해 다른 포트가 있어야합니다.

  1. www.wildfly.org/에서 파일을 다운로드 받습니다.
    • + )들어가면 베타 21.0.0 버전을 받으라고 합니다 (20-09-22 기준) 이거 말고 20.0.0 버전으로 받아주세요.
  2. 이전에 실행한 keycloak 루트 디랙토리를 수정하라고 하는데,, 왜 수정하라고 하는 것일까요? 어떻게 수정하는 것일까요?
    • 그냥 cd bin으로 루트 디렉토리를 이동해주는 것이라고 이해하면 됩니다
  3. keycloak server를 옵션을 주고 실행합니다. 이 값은 키클록 서버에 의해 열려진 모든 포트에 값이 더해집니다. 이 예제에서는 100 씩 더해집니다.
Linux / Unix 

$ cd bin
$ ./standalone.sh -Djboss.socket.binding.port-offset=100

windows 

> ...\bin\standalone.bat -Djboss.socket.binding.port-offset=100

4. http://localhost:8180/auth/admin/ 으로 가서 잘 접속되는지 확인해보자.

만약 콘솔이 잘 열린다면, WildFly가 Keycloak과 함께 구동될 수 있는 client adapter를 설치할 준비가 된 것이다.

아래에서 다시 설명이 나오는데, 404 - not found 에러가 발생하였습니다. 일단 계속 진행해주세요.

2.2 Wildfly client adapter 설치하기

WildFly와 Keycloak이 같은 기기에 설치되었다면, WildFly는 몇가지 수정을 해주어야 합니다. 이 수정을 위해서 Keycloak client adapter 가 필요합니다.

사전준비로

커스터마이징하기위해 WildFly의 ../standalone/configuration/standalone.xml 을 백업해놓자.

순서

  1. www.keycloak.org/downloads.html 경로로 들어가서 맨 밑의 client adapter zip을 다운로드 받아줍니다.
  2. 해당 zip 파일을 wildFly 루트 디랙토리에 가져다 놓습니다.
  3. unzip <filename>.zip 명령어로 해당 압축을 풀어줍니다. (저는 여기에서 시간을 많이 소요했습니다. 압축을 푼 상태로 가져다 놓았더니 동작하지 않아 한참 해맸습니다.) 공식문서에도 그러지 말라고 되어있으니 참고하세요! 
  4. cd bin
  5. 아래의 명령어를 사용하자.
$ ./jboss-cli.sh --file=adapter-install-offline.cli

6. 앱 서버를 실행해보자.

$ ./standalone.sh -Djboss.socket.binding.port-offset=100

왜그런지는 모르겠는데 7번 ~ 12번까지의 내용은 1번 ~ 6번과 동일한 내용이다. 문서를 잘못 작성한건가?? 왜그런지는 모르겠는데 여기서부터 공식문서가 약간 뇌절의 향기가 느껴졌다.

정리를 한번 해보면 

localhost:8080/auth/admin --> keycloak admin

localhost:10090/console --> wildfly console 이다. 이 부분도 공식문서에서 localhost:8180/auth/admin 으로 지정해놓았던데, 404 not found가 떠서 한참 고생했다. 결국 wildfly 공식문서를 번역하면서 해답을 찾을 수 있었다. 

wildfly 콘솔을 실행하기 위해서는 터미널에서 ./add-user.sh 를 실행시켜줘야 한다.

./add-user.sh
What type of user do you wish to add?
 a) Management User (mgmt-users.properties)
 b) Application User (application-users.properties)
(a):

다음과 같은 코드가 나오게 되고 dkyou7 / 123 으로 회원 가입을 진행해주었다. 모르는 설정들은 그냥 공백으로 놓고, 마스터 지정할꺼냐 그래서 마스터 지정해주었다. 그리고 실행해주었더니 

다음과 같은 콘솔 화면이 떳다.

이제 wildFly 앱을 keycloak에 적용시켜보자

2.3 wildFly 앱 등록하기

  • 키클록 어드민에 wildFly를 등록하자.
  • http://localhost:8080/auth/admin/master/console/#/realms/demo 에 들어가서 demo realm 으로 접속, 클라이언트 페이지를 열어주세요.
  • 우측 상단에 create 를 클릭해봅시다.

그 후 클라이언트를 추가해 줍니다.

저장을 누르면 아래와 같은 페이지가 나타날텐데, installation 탭을 클릭해줍니다.

다운받을 것은 Keycloak OIDC JSON, Keycloak OIDC JBoss Subsystem XML 두개의 파일입니다.

설정파일을 만들고 다운로드 받아줍니다. 

2.4 WildFly 인스턴스 변경해주기

wildFly 서블릿 앱은 keycloak 설정 전에 추가 환경구성이 필요합니다.

먼저는

- demo_client가 demo realm 내부에서 만들어져있어야하고(2.3 에서 했었죠)

- xml file이 있어야 합니다. ( 우리는 다운로드 받아주었으니 둘다 만족합니다. )

 

순서

1. 먼저는 wildfly 루트로 가서 standalone/configuration으로 경로 이동해줍니다. 그리구 xml 파일을 수정해줄게요

cd standalone/configuration
vim standalone.xml

vim으로 수정해줘도 되고 그냥 메모장으로 열어서 수정해주어도 됩니다. ( vim 으로 개발자스럽게 하려했지만 그냥 텍스트 편집기로 수정합니다.)

2. ctrl + f 로 <subsystem xmlns="urn:jboss:domain:keycloak:1.1"/> 문구를 찾아줍니다.

3. 해당 문구를

<subsystem xmlns="urn:jboss:domain:keycloak:1.1">
  		<secure-deployment name="demo_client.war">
    			<realm>demo</realm>
    			<auth-server-url>http://localhost:8080/auth</auth-server-url>
    			<public-client>true</public-client>
    			<ssl-required>EXTERNAL</ssl-required>
    			<resource>demo_client</resource>
  		</secure-deployment>
</subsystem>

로 바꾸어줍니다.

4. bin으로 이동 후 wildfly를 리부트 해줍니다.

$ ./standalone.sh -Djboss.socket.binding.port-offset=100

3. 결론

  • 갑자기 결론이 나와서 당혹스러우셨을 수도 있습니다.ㅎㅎ;; 하지만 다음부터는 git clone 으로 앱을 다운받아서 적용시키는 단계입니다. 아쉬운 분들은 여기에 설명이 있으니 마무리 하시면 됩니다.
  • git을 살펴보니 spring 으로 구현이 되어있었는데, 나는 spring boot 설정에 익숙하기 때문에 포기하려했습니다.
  • 혹시나 하는 마음에 spring boot keycloak 프로젝트가 있는지 살펴보았는데 맙소사. 역시 www.baeldung.com/spring-boot-keycloak 갓님께서 구현해주셨다.
  • 여기까지 잘 따라왔다면 keycloak이 무엇인지, wildfly에 wildfly client adapter를 설정해주어 keycloak 에 연동해주어야한다는 기본개념은 파악했을 것이라 생각합니다.
  • 지금까지 진행해주었던 것은 잠시 내려놓고(?) 저 프로젝트를 다시한번 구현해보면서 복습하는 것으로 이번 포스팅을 마무리하겠습니다. (물론 다음포스팅에는 저 블로그를 번역해볼 것이다.) 긴 글 읽어주셔서 감사합니다.
728x90
반응형