본문 바로가기
개념/Study

OIDC (OpenID Connect)

by Hwanii_ 2023. 11. 20.
728x90

OIDC (OpenID Connect) 이란 ?

 

OIDC == OpenID Connect 는 OpenID Foundation 에서 정의한 개방형 Authentication (인증) 프로토콜 이다.

 

SSO를 목적으로 JSON 데이터 형식으로 개발 되었다.

 

그리고 OIDC 는 OAuth 2.0 프로토콜을 기반으로, 상위 계층에서 간편하게 인증을 처리 하고,

신원 확인 서비스 == IDP 를 통해서 안전한 방식으로 사용자 정보를 제공 할 수 있다.

이때 여기서 IDP 는 OpenID Provider (OP) 를 의미 하고, 카카오 / 네이버 / 구글 / 등등 이 여기에 해당 된다.

 

 

 

OAuth 와 OIDC 는 무엇이 다를까 ?

 

OAuth 는 권한 허가 (인가 == Authorization) 를 처리 하기 위한 표준 프로토콜 이다.

 

OIDC는 OAuth 프로토콜을 기반으로 인증 (Authentication) 을 처리 한다.

즉, OIDC는 사용자 인증 및 사용자 정보 제공 (인증) 을 처리 하기 위한 프로토콜 이다.

 

예)

 

OAuth : 권한 부여 (access_token)

>> 블로그 포스팅 권한, 유저 프로필 수정 권한, 등등 ..

 

OIDC : 사용자 인증 및 사용자 정보 제공 (id_token)

 

 

 

그렇다면 서로 다른 역할을 위해 존재하는 기술인데, 어떻게 OIDC 는 OAuth 기반으로 작동 할까 ?

 

OAuth 기술을 통해서, 특정 권한 == 인가 == Authorization 을 부여 받으려면, 사용자는 인증을 필수적으로 거쳐야 한다.

 

그래서 OAuth를 통해서 사용자의 인증 정보가 담긴 ID Token 을 생성 할 수 있다.

 

아래에서 정리를 해보면,

 

1) OIDC가 사용자 정보 제공 "권한" 을 요청 한다. 사용자 정보 제공 "권한" 이다.

 

2) 그러면 IDC (OAuth) 가 이 요청을 보고, 아하 ? 사용자 정보 제공 "권한" 을 요청 했구나 ?

그렇다면 내가 id_token 을 줄게 !

 

3) 그러면 OpenID Connect == OIDC 가 id_token 을 받고, 이 id_token 에는 사용자 신원 정보가 담겨 있다.

 

4) 사용자 신원 정보가 담겨져 있는 id_token 을 통해 사용자는 인증을 할 수 있게 된다.

 

그러면 결과적으로 OIDC를 통해서 id_token 과 access_token 둘 다 발급 받을 수 있다.

 

참고로 id_token은 JWT 형식으로 되어 있다.

 

더보기

 

 JWT는 JSON Web Token의 약어 이다.

 

데이터를 JSON 데이터 형식으로 안전 하게 전송 하기 위한 토큰 이라고 생각 하면 된다.

 

JWT는 헤더 (Header), 페이로드 (Payload), 서명 (Signature) 로 구성 되어 있다.

 

헤더는 두 개의 정보를 Base64 로 인코딩한 문자열로 구성 된다.

 

예)

 

{
  "typ": "JWT",
  "alg": "HS256"
}

 

첫 번째는 토큰의 유형을 나타내는 typ 필드 이고,

두 번째는 사용된 해시 알고리즘을 나타내는 alg 필드 이다.

 

페이로드는 클레임 (Claim) 이라 불리는 정보를 포함 한다.

클레임은 사용자 정보, 토큰 만료 시간, 발급자, .. 등을 나타낼 수 있다.

페이로드 또한 Base64로 인코딩한 문자열로 구성 된다.

 

예)

 

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

 

서명은 헤더와 페이로드를 통해 (사용 하여) 생성 된다.

서명은 시크릿 키 또는 비밀 키를 사용 해서 생성 된다.

따라서 서명을 통해 토큰이 변조 되지 않은 유효한 토큰인지를 확인 할 수 있다.

 

정리하면,

 

JWT (Json Web Token) 은 헤더, 페이로드, 서명이 점 ( . ) 으로 구분 되어 합쳐진 형태로 표현 된다.

 

예)

 

[header].[payload].[signature]

 

이러한 간단한 구조를 통해 JWT 는 안전하고 간단 하게 정보를 전송 할 수 있다.

클라이언트와 서버 간의 통신에 자주 사용 된다.

 

특히 OAuth 2.0 및 OIDC 에서 인증 및 권한 관리를 위해 사용 된다.

 

OIDC (OpenID Connect) 방식의 장점

 

1.

OIDC 인증 서비스를 사용 하면 위에서 정리했듯이, id_token 과 access_token 둘 다 동시에 전달이 가능 하다.

 

그러면 어플은 사용자 정보를 받기 위해서 OAuth API를 다시 호출할 필요가 없어 진다.

 

이미 전달 받은 id_token 을 복호화 해서 바로 사용 하면 되기 때문 이다.

 

즉, API 호출이 줄어 들게 된다.

 

2.

상호 운용성 == interoperability (정보 교환 및 일련의 처리를 정확 하게 할 수 있는 것)

 

인증 서비스는 당연하게도 다양한 클라이언트들이 사용 할 수 있도록, 상호 운용성을 반드시 충족 해야 한다.

OIDC를 통해 필요한 사용자 정보를 id_token 을 통해 제공 할 수 있으므로, 상호 운용성이 충족 된다.

 

3.

단순성 / 모바일 지향 형식

 

JSON 데이터 형식의 기반으로 RestFul한 구조를 채택 해서 손쉽게 사용 할 수 있다.

 

 

 

정리

 

OIDC는 단순한 JSON 데이터 형식을 채택 하고, OAuth 2.0 프로토콜을 기반으로,

상위 계층에서 Authorization (인가) 을 가능 하게 했다.

 

또한, 기존의 구버전의 OIDC 에서 부족 했던 부분들을 개선 하고, 

OAuth 2.0 또는 SAML 의 장점을 채택 해서, 계속 해서 발전해 가고 있다.

 

 

 

반응형

'개념 > Study' 카테고리의 다른 글

내부망 / 외부망 / DMZ 이란 ?  (0) 2023.11.25
SAML (Security Assertion Markup Language)  (0) 2023.11.20
OAuth (Open Authorization)  (0) 2023.11.17
SSO (Single Sign-On) TYPE  (2) 2023.11.17
VMware과 Cloud의 공통점 및 차이점 정리  (0) 2023.11.17