개요
개인 서버의 인증 시스템과 타 인증시스템의 Integration에 대한 설계를 진행해 보았다.
OAuth2.0 시스템은 타 인증 시스템에 연동할 수 있는 스펙을 가지고 있기 때문에
비교적 수월한 설계가 가능했다.
인증/인가 정책
인증 시스템의 기본 정책에 대한 결정이 필요했다.
1. 인증은 무엇을 기준으로 할 것인가?
2. 인가는 무엇을 기준으로 할 것인가?
결정 사항
1. 인증은 내 서버의 계정을 기준으로 한다.
- 무조건 내 서버 계정으로 발급받은 토큰으로 인증을 수행한다.
2. 외부인증은 내 서버의 계정에 1:다 매핑하며, 인증된 내 서버 계정의 부가정보로 정의한다.
3. 인가는 내 서버 계정이 발급받은 토큰의 scope를 기준으로 한다.
4. 토큰 업그레이드를 통해 토큰의 인가를 관리할 수 있도록 한다.
- 토큰 업그레이드는 토큰은 그대로 두고, 토큰에 매핑된 부가정보만 추가 / 변경되는 프로세스
5. 외부 인증시스템과의 연동 또한 토큰 업그레이드 방식으로 진행한다.
- 외부 계정 연동은 내 서버 계정에 부가 정보를 추가하는 방식
토큰 발급 / 토큰 업그레이드 Flow
title 북극곰은콜라 인증 Sequence
note over Client, LoginPage, GateWay_Auth, Main
일반 인증 (Authorization_code)
end note
Client->GateWay_Auth: 인증 요청 (GET /authorize)
GateWay_Auth->Client: Redirect (308)
Client->LoginPage: Redirect
LoginPage->GateWay_Auth: 인증 요청 (GET /authroize)\nWith id/pw
GateWay_Auth->LoginPage: Redirect (308)
LoginPage->Client: Redirect with token
note over Client, LoginPage, GateWay_Auth, Main, Google
구글 연동
end note
Client->Google: 인증 요청 (Authorization_code)
Google->Client: Redirect (with code)
Client->GateWay_Auth: POST /oauth/token/google\n(my_token + Google_token)
GateWay_Auth->Google: 토큰 발급
Google->GateWay_Auth: response
GateWay_Auth->GateWay_Auth: parse id_token(JWT)
GateWay_Auth->Main: Check Google 연동\n(id_token subject로)
Main->GateWay_Auth: response
alt not 연동
GateWay_Auth->GateWay_Auth: Get User From Token
GateWay_Auth->Main: POST 연동 정보
Main->GateWay_Auth: response
GateWay_Auth->GateWay_Auth: Token Upgrade\n토큰 연동정보 추가
end
GateWay_Auth->Client: response upgraded Token
일반인증:
기본적으로 OAuth2.0 Authorization의 implicit grant 방식을 변형하여 사용하여 인증을 수행한다.
custom parameter로 id / pw에 대한 정보를 받아서, username / password로 인증을 수행
username / password가 없을 시 로그인 페이지로 redirect
username / password 검증으로 인증 통과 시 토큰 발급
구글 아이디 연동:
일반인증을 통한 토큰으로 1차 인증
구글에서 발급받은 authorization_code를 받아서 구글에서 토큰 발급
일반토큰의 accountId를 통해 연동이력확인, 없을 시 google id_token의 JWT 값을 파싱 하여 Google 연동 POST
연동 후 토큰 업그레이드 진행 (구글 토큰에 대한 정보 account 정보에 매핑)
REFERENCE
- https://developers.google.com/identity/protocols/oauth2?hl=ko#2.-obtain-an-access-token-from-the-google-authorization-server.
- https://developers.google.com/identity/protocols/oauth2/native-app?hl=ko
'[완] 개인서버 개발 > 공통 서비스 개발(완)' 카테고리의 다른 글
#6 Webflux기반 OAuth2서버 + gateway 구축 (0) | 2023.05.14 |
---|---|
#5 와우 경매장 데이터 적재 (0) | 2023.04.09 |
#4 MongoDB 설치 (0) | 2023.03.30 |
#3 Confluent Platform 설치 (0) | 2023.03.29 |
#2 Jenkins를 통한 CI/CD 환경 구축 with docker (0) | 2023.03.17 |