[완] 개인서버 개발/공통 서비스 개발(완)

#7 3rd OAuth 연동 (google)

북극곰은콜라 2023. 5. 19. 22:37
반응형


개요

개인 서버의 인증 시스템과 타 인증시스템의 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

 

반응형