[OIDC]란 무엇일까?

최동근·2023년 1월 20일
1

SSO

목록 보기
1/2

안녕하세요 오늘은 OpenID 인증 관리수단에 대해 알아보겠습니다.
프로젝트를 진행하면서 Oauth 2.0 방식에 대해 알게 되었는데, Oauth 2.0 방식과 같이 대표되는 SSO(Single Sign-On) 인증 솔루션 중 하나인 OpenID 에 대해서도 정리할 필요성을 느껴서 이렇게 포스팅을 작성하게 되었습니다 🧑🏼‍💻

OpenID 를 본격적으로 알아보기 전에 SSO 인증 서비스 방식에 대해 간단하게 알아보겠습니다 👨‍💻

🔑 SSO

SSO 란 무엇인가?

'사용자 인증' 이라는 기능은 겉으로 보기에는 단순해보이고 당연한 기능 처럼 보이지만 사실 구현하기 굉장히 까다로우면서 보안에 매우 민갑합니다.
따라서 일반적인 어플리케이션에서 독자적으로 사용자 인증 서비스를 구축하기에는 부담이 될 수 있습니다 😰

시스템(어플리케이션) 이 해야할 '사용자 인증 책임'을 카카오, 네이버 , 구글 처럼 신뢰할 수 있는 서비스 공급체에게 인증 책임을 위임하는 인증 서비스를 구축하자 🎳

이를 바탕으로 탄생한 인증서비스 방식이 SSO 입니다.
SSO 는 (Single Sign - On) 의 약자로, 여러개의 서비스에서 하나의 시스템에 저장되어 있는 인증 정보를 이용해서 통합 인증을 사용하게 하는 것을 의미합니다.
즉, 하나의 시스템에서 인증을 할 경우 다른 시스템에 인증 정보가 있는지 확인하고 있으면, 해당 정보를 통해 로그인 처리를 하도록 하고 없는 경우 다시 통합 인증을 할 수 있도록 만드는 것을 의미합니다 🙆🏻
SSO 방식을 이용하면 여러가지 장점이 있지만 신뢰할 수 있는 인증 서비스 공급체가 제공하는 인증 서비스를 이용할 수 있으며 사용자 입장에서도 어플리케이션 마다 개별로 계정을 만들 필요가 없으니 편합니다.

SSO 인증 서비스를 제공하는 대표적인 공급체는 카카오,네이버,구글 등이 있습니다 👨‍🎨

SSO 작동 원리

SSO 을 구현하기 위한 표준은 여러가지이지만 기본 패턴은 동일합니다.

1. Delegation Model

대상 서비스의 인증방식을 변경하지 않고, 사용자의 인증 정보를 Agent 가 관리하여 대신 로그인 해주는 방식입니다.

2. Propagation Model

통합 인증을 수행하는 곳에서 인증을 받아 인증 토큰을 발급 받습니다.
사용자가 서비스에 접근할 때 발급받은 인증 토큰을 서비스에 같이 전달하게 되고, 서비스는 토큰 정보를 통해 사용자 인식이 가능해집니다.

SSO 아키텍처

SSO 인증 서비스 방식을 구현한 아키텍처에는 대표적으로 3가지가 있습니다.

  • SAML(Security Assertion MarkUp Language)

  • OAuth

  • OpenID

이처럼 SSO 인증 서비스는 인증 관련한 여러가지 문제점들을 해소해주는 인증 방식입니다 💪

🔑 OIDC

OIDC란 무엇인가?

OIDC(Open Identity Connection) 은 OpenID Foundation 에서 정의한 개방형 Authentication 표준이며, Consumer Application SSO를 목적으로 JSON 형식으로 개발되었습니다.
또한 OIDC는 OAuth 2.0 프로토콜을 기반으로 상위계층에서 간편하게 인증을 처리하며, 신원확인 서비스(IDP)를 통해 안전한 방식으로 사용자 정보를 제공할 수 있습니다.
여기서 IDP는 OP(OpenID Provider)를 의미하며 카카오,네이버, 구글이 해당됩니다 🧑🏼‍💻

OIDC vs OAuth

앞에서 정리했던 것처럼 OIDC 는 OAuth 프로토콜을 기반으로 인증을 처리합니다.
이때 OAuth 는 '권한 허가(인가)'를 처리하기 위해 만들어진 표준 프로토콜입니다.
반면, OIDC는 '사용자 인증 및 사용자 정보 제공(인증)'을 처리하기 위해 만들어졌습니다.

  • OIDC : 사용자 인증 및 사용자 정보 제공(id token)
  • OAuth : 권한 부여(Access Token) ex) posting 권한, 유저 profile view 권한 등

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

특정 권한을 부여받기 위해 OAuth 기술을 사용할 때 사용자는 인증 과정을 거쳐야 합니다.
그렇기 때문에 OAuth 를 통해 인증 정보가 담긴 id token을 생성할 수 있습니다.

이때 id token은 jwt 형식을 따릅니다.
id token에는 사용자 신원 정보가 담겨 있으며 이를 통해 사용자는 인증을 할 수 있습니다.
결국 OIDC를 사용하면 id token과 access token 을 둘다 발급 받을 수 있습니다.

🔑 OIDC 방식의 장점

OIDC 인증 서비스를 이용하면 id token 과 access token 을 동시에 전달합니다.
이때문에 서비스중인 어플리케이션은 사용자 정보 제공을 받기 위해 OAuth API 를 다시 호출할 필요 없이 이미 전달 받은 id token을 복호화 하여 바로 사용할 수 있습니다.
즉 API 호출이 절반으로 감소합니다.
이외에도 다양한 장점이 존재합니다 👍

  1. 상호운용성

인증 서비스는 기본적으로 다양한 Consumer 서비스들이 사용할 수 있도록 상호운용성을 반드시 충족해야 합니다. OIDC를 통해 필요한 사용자 정보들을 ID 토큰을 통해 제공할 수 있습니다.

  1. 단순성, 모바일 지향 형식

JSON 기반의 REST 친화적인 구조를 채택하여 손쉽게 사용할 수 있습니다.

  1. 보안

ISO/IEC 29115 Entity Authentication Assurance 프레임워크의 레벨 1~4를 선택할 수 있습니다. 레벨이 높을수록 인증 시 PIN과 같은 추가적인 정보를 요구할 수 있습니다.

🔑 마치며

OIDC는 심플한 JSON 형식을 채택하고 OAuth 2.0 프로토콜을 기반으로 상위계층에서 Authorization(인가)을 가능케 하는 등 기존의 OpenID 1.0, 2.0에서 부족했던 부분들을 개선하고, SAML, OAuth 2.0의 장점들을 수용하여 새로운 모습으로 발전해 나가고 있습니다. 앞서 예를 든 것과 같이 Google을 비롯한 많은 IDP가 채택 중인 OIDC는 사용자뿐 아니라 다양한 개체(Entity)를 인증하는 데에도 사용되고 있습니다.

이처럼 OIDC는 현재 많이 사용되는 인증 방법중 하나입니다 👨‍💻


참고

편의성을 높인 ID 인증 관리 - OIDC(OpenID Connect)가 주목 받는 이유
k8s 인증 완벽이해 #3 - OpenID Connect

profile
비즈니스가치를추구하는개발자

0개의 댓글