작년에 XX카드 마이데이터 API 제공 프로젝트를 진행하면서 oauth 2.0 에 대한 부분을 많이 보았다.
마이데이터에서 인증방식은 Authorization Code, client credentials, password 방식을 사용하였다.(총 4개임, 마지막은 암시적 승인이라고.. ) 해당 프로젝트는 신용정보원, 인증기관, 사업자, 제공자 등 기관간의 연계를 보며 인증/인가를 통해 API를 주고받는 식이다.
또, 마이데이터 API 규격서에도 보면 좋은 내용들이 있고, 지금도 신규 사업자들이 생겨나고 있다.
모든 통신의 꽃은 결국 인증이다.
프로젝트 에서는 rhsso 를 사용하였는데(redhat에서 나온 제품, 오픈소스 keycloak base),
token에 대한 설정들을 대시보드를 통해 매우 쉽게 컨트롤 할 수 있었다.
(rhsso는 redhat 지원을 받을 수 있는 제품이기에 사용함. 물론 keycloak으로도 쉽게할 수 있고)
이 인증이라는 것은 이미 네이버,카카오,구글 을 통해 수많은 사용자들이 이용하고 있는데, 문득
인증 서버를 만들어보고 싶다
는 생각이 들어 spring security 를 찾아보았다.
spring security에는 인증을 위한 filter 들이 있는데 기본적으로 세팅되어있는 부분(예를들면 로그인페이지 같은)을 수정하며 만들어 나가는 블로그 글들을 보았다. 몇차례 둘러보고 이제 만들려고 하는 찰나.
스프링 시큐리티 버전을 결정하고보니 Authorization Server를 삭제한다는 history 들을 찾았다..
인증서버를 직접 구현하는 것보다 이미 나와 있는 keycloak 같은 솔루션을 이용하는게 더 좋은 방향이다.?
뭐 그런 내용들이였던 것 같다.
뭐..뭐야... 인증서버 만들고 싶은데..
그러던 중... 우연히 spring learn 에서
마지막 수정일이 7월 18일인 따끈따끈한 인증서버 구현 글을 찾았다.
바로 맨밑의 github 링크를 클릭하고..!
프로젝트를 다운했다.
hosts에
127.0.0.1 auth-server
넣어주고, 서버를 기동하고 테스트!
브라우저에서 http://127.0.0.1:8080/articles 로 접근해보자,
인증정보가 있다면 페이지 내용이 보이고,
인증정보가 없다면 로그인 페이지(http://auth-server:9000/login)로 페이지가 리다이렉트 된다.
username : admin
password : password
로 로그인 해보면
승인되어 원래 페이지로 리다이렉트 됨!
이 예제에는 총 3개의 application이 존재하는데 인증서버, 리소스서버, 클라이언트서버이다.
인증서버는 9000 번 포트를 사용하며
로그인을 처리와 권한을 부여해 주는 서버이다.
리소스서버는 8090 번 포트를 사용하며
권한을 체크하고 실제 page 를 보여주는 서버이다.
클라이언트서버는 8080번 포트를 사용하며
로그인 정보가 있는지 체크하고 인증서버나 리소스서버로 이동시키는 서버이다.
간단하게 application yml 정도만 포스팅 해 놓겠다.
인증서버 application.yml
server:
port: 9000
logging:
level:
root: INFO
org.springframework.web: INFO
org.springframework.security: INFO
org.springframework.security.oauth2: INFO
리소스서버 application.yml
server:
port: 8090
logging:
level:
root: INFO
org.springframework.web: INFO
org.springframework.security: INFO
org.springframework.security.oauth2: INFO
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://auth-server:9000
클라이언트서버 application.yml
server:
port: 8080
logging:
level:
root: INFO
org.springframework.web: INFO
org.springframework.security: INFO
org.springframework.security.oauth2: INFO
spring:
security:
oauth2:
client:
registration:
articles-client-oidc:
provider: spring
client-id: articles-client
client-secret: secret
authorization-grant-type: authorization_code
redirect-uri: "http://127.0.0.1:8080/login/oauth2/code/{registrationId}"
scope: openid
client-name: articles-client-oidc
articles-client-authorization-code:
provider: spring
client-id: articles-client
client-secret: secret
authorization-grant-type: authorization_code
redirect-uri: "http://127.0.0.1:8080/authorized"
scope: articles.read
client-name: articles-client-authorization-code
provider:
spring:
issuer-uri: http://auth-server:9000
이제 이 가이드 코드를 보고 더 공부해보아야겠다.
끝!
참고한 site
'개발' 카테고리의 다른 글
[Springboot] JPA 적용 (0) | 2022.08.04 |
---|---|
[Springboot] swagger 3.0 설정 (0) | 2022.08.04 |
[Springboot] CSRF Token 설정 시 Postman 테스트 방법(Spring Security) (0) | 2022.08.04 |