Dev/SpringBoot

20. [SpringBoot] 버전 걱정 없는 SSO 구현 번역해보기 - 2

VIPeveloper 2020. 9. 22. 13:00
728x90
반응형

1. 서론

  • 오늘은 어제에 이어서 두번째 앱을 구성해보겠습니다.

2. 본론

  • 스프링 OAuth Client Thymeleaf-2를 사용하였습니다. 이전 포스팅에서 첫번째 앱을 구성한 것과 비슷한 설정을 가져갈 것입니다.

2.1 application.yml

spring:
  security:
    oauth2:
      client:
        registration:
          custom:
            client-id: ssoClient-2
            client-secret: ssoClientSecret-2
            scope: read,write
            authorization-grant-type: authorization_code
            redirect-uri: http://localhost:8084/ui-two/login/oauth2/code/custom
        provider:
          custom:
            authorization-uri: http://localhost:8083/auth/realms/baeldung/protocol/openid-connect/auth
            token-uri: http://localhost:8083/auth/realms/baeldung/protocol/openid-connect/token
            user-info-uri: http://localhost:8083/auth/realms/baeldung/protocol/openid-connect/userinfo
            user-name-attribute: preferred_username
  thymeleaf:
    cache: false
  cache:
    type: NONE
    
server: 
  port: 8084
  servlet: 
    context-path: /ui-two
    
logging: 
  level: 
    org.springframework: INFO

resourceserver:
  api:
    url: http://localhost:8081/sso-resource-server/api/foos/
      

 

  • 두번째 앱은 당연하지만 첫번째 앱과 다른 client_id, client_secret and redirect_uri을 가지고 있습니다.
  • 당연히 포트 또한 다르기 때문에 첫번째 클라이언트 앱과 병렬적으로 실행할 수 있습니다.
  • 마무리로 클라이언트앱-1 과 비슷하지만 약간 다른 설정으로 프론트엔드를 구성해볼 것입니다.

2.2 SSO 테스트해보기

  • 대망의 테스트 흐름입니다.
  • 4개의 앱을 모두 기동해봅시다.(인증서버, 리소스서버, 클라이언트 앱 2개)
  • 브라우져를 열고, client-1 앱(8082포트)을 기동해봅시다. -> http://localhost:8082/ui-one/

  • 간단히 로그인 하라는 버튼 하나만 있을 것입니다. 눌러주면

  • 인증페이지(8083포트)로 갑자기 이동되면서 다음과 같은 화면이 보일 것입니다.
  • 이제 위의 url을 자세히 뜯어보는 시간을 가져봅시다.
http://localhost:8083/auth/realms/baeldung/protocol/openid-connect/auth

?response_type=code

&client_id=ssoClient-1

&scope=read%20write

&state=Xrcx1_SYgrcl6qN4zVLyKrTaDpj5owH9vkleTvZ6rsQ%3D

&redirect_uri=http://localhost:8082/ui-one/login/oauth2/code/custom
  • 음.. 다 application.yml 에 있었던 코드 같은데요. state는 무슨 정보인지 잘 모르겠습니다. 나머지는 다 있는 정보같네요.
  • 미리 등록되어있는 정보 id : john@test.com / 123 을 입력하여 로그인해봅시다.
  • 다음에 다른 탭을 열어서 클라이언트-2 를 실행시켜주고, 로그인 버튼을 눌러봅시다!
  • 신기하게도 Foo 정보가 인증을 거치지 않고 보일 것입니다.
  • 반대로도 마찬가지입니다.  유저 로그가 2번째에 먼저 남아있으면, 1번째 것도 인증 없이 통과됩니다.

3. 결론

이 튜토리얼에서는 Spring Security OAuth2 와 Keycloak을 아이디 provider로 이용한 스프링 부트 프로젝트로 구현해보는 실습을 가졌습니다.

 

728x90
반응형