IT/보안

Front-end, Back-end, Keycloak 연결에 대한 정리

캥거루 2021. 8. 23. 16:38
728x90
반응형

테스트 환경

1. Front-end

- React, Swagger-UI

 

2. Back-end

- SpringBoot

- Spring Security Keycloak Adapter

 

3. Keyclaok

 

4. 인증방식

OIDC

Bearer, JWT

 

사용 프로세스

1. 아래 그림은 타 시스템에서의 프로세스를 정리한 그림입니다.

세부적인 프로세스

1. Front-end 에서 로그인 버튼 클릭 (Keycloak 과 연결 설정이 되어있어야 함)

2. Keycloak Login 페이지 호출 및 로드

3. 로그인 수행

4. 인증이 필요한 Back-end API 호출

- HTTP Header 에 Bearer 인증타입의 암호화된 토큰(JWT)을 포함하여 API 호출 수행

  (즉, Credentials 을 헤더에 넣어서 전송)

- 위 Bearer 타입의 JWT 는 https://jwt.io/ 해당 사이트에서 디코딩하여 정보 확인 가능

5. Back-end

- 프로그램 실행 시 정의해둔 keycloak 정보 (keycloak server, realm, client 등의 정보) 를 이미 보유

- Keycloak 의 /auth/realms/{realm}/.well-known/openid-configuration API 에서 Keycloak OIDC 정보를 조회

- Keycloak 의 /auth/realms/{realm}/protocol/openid-connect/certs API 에서 secret key 를 조회

- Front-end 에서 받은 JWT 를 복호화하여 사용자 정보가 포함된 토큰을 복호화하고 이를 SecurityContextHolder 를 updating 한다.

 

대략적으로 이런 프로세스를 가지는 것을 확인하였습니다.

 

용어에 대한 부가 설명

1. 인증 방식의 종류

- 쿠키, 세션 방식

 

- 토큰 방식 (ft. JWT)

 

2. 토큰 기반 인증 타입

- Basic: ID 와 PW 를 Base64 로 인코딩한 값을 토큰으로 사용 (RFC 7617)

- Bearer: JWT 혹은 OAuth 에 대한 토큰을 사용한다. (RFC 6750)

- Digest: 서버에서 난수 데이터 문자열을 클라이언트에 보낸다. 클라이언트는 사용자 정보와 nonce 를 포함하는 해시값을 사용하여 응답한다. (RFC 7616)

- HOBA: 전자 서명 기반 인증 (RFC 7486)

- Mutual: 암호를 이용한 클라이언트-서버 상호 인증 (draft-ietf-httpauth-mutual)

- AWS4-HMAC-SHA256: AWS 전자 서명 기반 인증 (링크)

 

3. 토큰 기반 인증 (JWT)

- Header: 암호화 방식, 암호화 타입, key id 등

- Payload: IDP(ID Provider) 기준으로 클라이언트 정보, 토큰, 사용자의 메타데이터 등

- Signature: 토큰 검증을 위한 데이터 (헤더에서 지정한 알고리즘과 secret key, 서명으로 header 와 payload 를 담는다)

 

* 결과적으로 Encoded Header + "." + Encoded Payload + "." + Verify Signature 형태로 구성된다.

 

 

참고자료

https://github.com/ivangfr/springboot-react-keycloak

 

GitHub - ivangfr/springboot-react-keycloak: The goal of this project is to secure movies-app using Keycloak(with PKCE). movies-a

The goal of this project is to secure movies-app using Keycloak(with PKCE). movies-app consists of two applications: one is a Spring Boot Rest API called movies-api and another is a ReactJS applica...

github.com

https://tansfil.tistory.com/58

 

쉽게 알아보는 서버 인증 1편(세션/쿠키 , JWT)

앱 개발을 처음 배우게 됐을 때, 각종 화면을 디자인해보면서 프론트엔드 개발에 큰 흥미가 생겼습니다. 한때 프론트엔드 개발자를 꿈꾸기도 했었죠(현실은 ...) 그러나 서버와 통신을 처음 배

tansfil.tistory.com

https://velog.io/@cada/%ED%86%A0%EA%B7%BC-%EA%B8%B0%EB%B0%98-%EC%9D%B8%EC%A6%9D%EC%97%90%EC%84%9C-bearer%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

 

토근 기반 인증에서 bearer는 무엇일까?

본 글은 MDN - HTTP 인증, Veloport님의 게시글을 참고하여 작성되었습니다. 자세하게 알고싶으신 분은 해당 링크를 참고해주세요.토큰 기반 인증인증 타입마치며토큰 기반 인증은 쿠키나 세션을 이

velog.io

https://yonghyunlee.gitlab.io/node/jwt/

 

세션 기반 인증 방식과 토큰 기반 인증(JWT) - 김땡땡's blog

세션 기반 인증 방식 옛날에 토큰 기반 인증이 없었을 때 서버 세션을 사용해 인증을 했다. 클라이언트가 로그인 성공하면 서버가 유저 세션을 만들고 메모리나 데이터베이스에 저장한다. 서버

yonghyunlee.gitlab.io

https://calgary.tistory.com/3

 

대칭키, 공개키(Public key), 개인키(Private key) 란?

# 대칭키 방식 하나의 키로 암/복호화를 수행 대칭키가 노출되는 경우 암호화된 내용을 복호화할 수 있게됨 이를 보완하기 위해 탄생한게 공개키 방식 # 공개키 / 개인키 방식 공개키, 개인키 두

calgary.tistory.com

 

728x90
반응형