OAuth&OIDC

임정환·2023년 6월 2일
0

정보보안 수업중, 익숙한 Authorization 기법이 등장.
반가운 마음에 바로 포스팅해본다.

어떻게 kakao id로 다른 플랫폼에서 로그인이 가능할까?

kakao login api , google login api ... 어떻게 가능할까?
플랫폼에(이하 client)에 카카오 id와 pw를 주면 플랫폼이 로그인을 해보고 로그인이 된다면
'ok 인정' 해주는 건가?
절대 그럴리가 없다. 이제부터 원리를 파헤쳐보자

OAuth 2.0


User가 App XYZ에서 App ABC의 서비스가 필요한 경우. Client(App XYZ)가 ABC의 authorization endpoint에 인가 요청 ( authorization , 특정 리소스에 대한 access control ). 이후 User는 ABC의 로그인 form으로 리다이렉트 되고 id와 pw를 통해 인증이 된다면 ABC는 Client app에 authorization code를 발행한다. Client는 이 code를 들고 ABC의 token발행 엔드포인트에 제출한다면 access token을 발행 받을 수 있게된다.
이후 해당 access token을 통해 api에 접근하여 서비스를 사용할 수 있게 된다.

OpenID Connect(OIDC)

조금 생각을 해보자면 위의 방식은 조금 귀찮은 구석이 존재한다. Access Token을 통해 api 접근 권한은 얻을 수 있는데, 어떠한 User인지는 여전히 모른다. 그러면 결국 추가적인 통신을 통해서 어떠한 user인지 특정하는 과정이 필요하다.
그렇기에 OIDC라는 레이어를 OAuth 프로토콜 위에 구현하여 귀찮음을 없앨 수 있다.

response_type = code로 지정하고 openid parameter에 인자를 전달하여 줄 경우 ABC의 Token Endpointd에서 ID Toekn과 Access Token을 발행하여 준다. 그리고 이 ID Token이 개발하다보면 익숙한 JWT(Json Web Token)이다.

JWT


'헤더+페이로드+서명'의 구조를 가지고 있으며 페이로드를 통해 '클레임' ( 내가 누구인지 주장)과 서명을 통해 유효성을 검증할 수 있다. base64로 인코딩 되어 있기에 척 보면 '뭐지?' 하겠지만 디코딩 해본다면
위와 같이 페이로드 필드를 확인해 볼 수 있다.

Conclusion

사실 정확한 parameter , header 필드 등 조금 더 상세한 사항이 있지만 개념 정도만 이해하고 넘어가자는 차원에서
작동 Protocol만 적어놨다. 더욱 자세한 상황이 생긴다면... 챗지피티한테 물어보도록 하자

profile
CS 박제

0개의 댓글

관련 채용 정보