[Security] OpenID Connect

[Security] OpenID Connect

“해당 포스팅은 우아한Tech[10분 테코톡] 토닉, 후디의 인증과 인가 - 부족사회부터 소셜로그인까지을 참고하여 포스팅하였습니다. 영상을 제작해주신 우아한Tech토닉, 후디님에게 감사드립니다.”

#목차

OpenID Connect

OpenID Connect 개요

클라이언트의 단점

openid_outline1

  • 우리가 일반적으로 직접 인증기능을 구축하기 위해선 사용자로부터 ID/PW등과 같은 개인정보를 직접 제공 받아야 한다.
  • 그런데, 보안사고가 터지면 큰일이다…

사용자의 단점

openid_outline2

  • 사용자 또한 불편함을 가지고 있게 된다.
  • 지금 처럼 굉장히 많은 서비스를 이용하는 시대에서 각 서비스마다 ID/PW기억하고 있어야하는 불편함이 생긴다.

OpenID의 시작

openid_question

  • 이런 아이디어에서 OpenID가 시작 되었다
  • OpenID Foundation에서 추진하는 개방형 표준 및 분산 인증 프로토콜이다

OpenID의 장점

explan_openid

OpenID를 사용하면 새 비밀번호를 만들 필요 없이” 기존 계정을 사용하여 여러 웹사이트에 로그인할 수 있다.”

OpenID의 2가지 버전

openid_2version

  • OpenID도 크게 두 가지 주체로 나눌 수 있다
  • IdP : 구글, 카카오와 같이 OpenID 서비스를 제공하는 당사자
  • RP : 사용자를 인증하기 위해 IdP에 의존하는 주체

OpenID 버전

openid_version

“해당 포스트에서는 3세대 OpenID Connect(OIDC)를 포스팅

OpenID Connect 정의

explan_openid2

OpenID Connect 1.0은 OAuth2.0 프로토콜 위에 있는 간단한 ID 계층. 이를 통해 클라이언트는 REST와 유사한 방식으로 최종 사용자의 신원과 기본적인 프로필 정보를 얻을 수 있다”

OIDC와 OAuth2.0

openid_hierarchy

OIDC와 OAuth2.0의 목적 차이

oauth_vs_openid

OAuth2.0과 OpenID Connect목적 차이

  • OAuth2.0 목적 : Access Token을 발급받고 리소스에 접근하기 위해 발급
  • OpenID Connect 목적 : ID Token을 발급받고 ID Token으로부터 사용자 식별 정보를 얻기 위해 사용된다

ID Token

id_token

사용자 식별정보를 담고 있는 JWT토큰

id_token_payload

ID Token의 발급 방법

how_to_issue_id_token

ClientAuthorization ServerOAuth2.0 인증을 요청 할 때 Scope에 OpenID를 추가하면, ID Token을 받을 수 있다”

OAuth2.0의 단독 유저 식별의 문제점

openid_question2

OAuth2.0사용자에 대한 정보명시적으로 제공하지 않는다

different_oauth_openid

  • OAuth2.0을 통해서 발급받은 Access Token으로는 서버의 리소스는 접근 권한이 가능하지만, 발급받은 Access Token만으로는 사용자 정보 프로필획득 불가
  • OpenID Connect를 통해서 발급받은 ID Token으로는 서버의 리소스는 접근 권한이 불가능하지만, 발급받은 ID Token만으로는 사용자 정보 프로필획득 가능

유저 프로필 가져올 때

use_oauth

OAuth2.0만을 사용했을 땐, 통신이 두 번 발생

  1. Access Token요청할 때
  2. Access Token을 가지고 유저 프로필 정보요청할 때

use_openid

“반면, OpenID Connect를 사용하면 한 번의 통신으로도 유저 프로필 정보획득

  1. Access TokenID Token한 번에 요청하고 한 번에 전달받게 된다
  2. 이어서 후속적인 조치 없이 Client는 방금 전달받은 ID Token디코드 하여 유저 프로필 정보를 획득

Back to [Security] OAuth