OIDC는 디지털 서비스에 액세스하기 위해 로그인시 사용자를 인증하고 권한을 부여하는 프로세스를 표준화하기 위한 OAuth 2.0이 확장된 ID 인증 프로토콜이다.
OIDC는 인증
을 제공한다. OAuth 2.0은 해당 사용자가 액세스할 수 있는 시스템에 권한을 부여한다. 일반적으로 관련이 없는 두 Application이 사용자 데이터를 손상 없이 정보를 공유할 수 있도록 하는 데 사용된다.
예를 들어, 많은 서비스는 자체 회원가입 방식이 아닌 소셜 미디어 계정을 사용하여 로그인한다.
OIDC는 Single Sign-On(SSO)을 제공하는 데도 사용된다.
Sigle Sign-On(SSO)
SSO는 사용자가 한번의 로그인으로 여러 서비스 또는 애플리케이션을 사용할 수 있도록 해주는 인증 방식
Authentication(인증)
Client(클라이언트)
Relying Party(RP, 신뢰 당사자)
ID Token(ID 토큰)
OpenID Provider(OP, OpenID 공급자)
User(사용자)
OIDC 인증은
하는 방식으로 작동한다.
예를 들어, 뉴스 사이트에서 사용자가 계정을 만들려는 경우 새 계정을 만드는 대신 Facebook, Instagram 등을 사용하여 계정을 만드는 옵션이 있을 수 있다. 소셜 미디어로 로그인하는 경우 OIDC 인증을 사용한다. OpenID 공급자라고 하는 소셜 미디어는 인증 프로세스를 처리하고 사용자 프로필과 같은 특정 정보를 신뢰 당사자(RP)인 뉴스 사이트에 제공하기 위해 사용자의 동의를 얻는다.
소셜 미디어로 로그인을 해본 사람이라면 이 과정이 익숙할 것이다.
OpenID 공급자는 ID Token을 사용하여 인증 결과 및 관련 정보를 신뢰 당사자에게 전송한다. 전송되는 데이터 형식의 예로는 ID, 이메일 주소 및 이름 등이 있다.
범위는 사용자가 액세스 권한으로 수행할 수 있는 작업을 정의한다. OIDC는 토큰이 생성된 신뢰 당사자, 토큰이 생성된 시기, 토큰이 만료되는 시기 및 사용자를 인증하는 데 사용되는 암호화 강도와 같은 항목을 정의하는 표준 범위를 제공한다.
일반적인 OIDC 인증 프로세스는 아래와 같다.
1. 사용자가 액세스하려는 애플리케이션(신뢰 당사자, RP)으로 이동한다.
2. 사용자가 사용자 이름 및 암호를 입력한다.
3. 신뢰 당사자가 OpenID 공급자에게 요청을 보낸다.
4. OpenID 공급자는 사용자의 자격 증명의 유효성을 검사하고 권한 부여를 얻는다.
5. OpenID 공급자는 ID 토큰과 액세스 토큰을 신뢰 당사자에게 보낸다.
6. 신뢰 당사자는 사용자 디바이스에 액세스 토큰을 보낸다.
7. 액세스 토큰 및 신뢰 당사자에 제공된 정보에 따라 사용자에게 액세스 권한이 부여된다.
OIDC 흐름은 토큰을 요청하고 신뢰 당사자에게 전달하는 방법을 정의한다. 4가지 예를 소개해보면
OIDC 권한 부여 흐름: OpenID 공급자가 신뢰 당사자에게 고유한 코드를 보낸다. 그런 다음 신뢰 당사자는 토큰을 대신하여 고유 코드를 OpenID 공급자에게 다시 보낸다. 이 메서드는 OpenID 공급자가 토큰을 보내기 전에 신뢰 당사자를 확인할 수 있도록 사용된다. 브라우저는 이 메서드에서 토큰을 볼 수 없으므로 보안을 유지하는 데 도움이 된다.
PKCD 확장을 사용하여 OIDC 권한 부여 흐름: PKCE(코드 교환) 확장에 공개 키를 사용하여 통신을 해시로 전송한다는 점을 제외하고 OIDC 권한 부여 흐름과 동일하다. 이렇게 하면 토큰을 가로챌 가능성이 줄어든다.
클라이언트 자격 증명: 애플리케이션 자체의 ID를 사용하여 웹 API에 대한 액세스를 제공한다. 일반적으로 서버 간 통신 및 사용자 상호 작용이 필요하지 않은 자동화된 스크립트에 사용된다.
디바이스 코드: 이 흐름을 통해 사용자는 브라우저가 없거나 스마트 TV와 같은 키보드 환경이 좋지 않은 인터넷에 연결된 디바이스에서 웹 기반 API에 로그인하고 액세스할 수 있다.
OIDC는 인증을 추가하기 위해 OAuth 2.0을 기반으로 빌드되었다. OAuth 2.0 프로토콜이 먼저 개발된 후 기능을 개선하도록 OIDC가 추가되었다. 둘의 차이점은 OAuth 2.0은 권한 부여를 제공하는 반면 OIDC는 인증을 제공한다는 점이다.
OAuth 2.0은 사용자가 OpenID 공급자와 함께 자신의 계정을 사용하여 신뢰 당사자에 액세스할 수 있도록 하는 것이며, OIDC는 OpenID 공급자가 사용자 프로필을 신뢰 당사자에게 전달할 수 있게 해준다.
OIDC 정의에서도 언급된 것처럼 OIDC를 사용하면 사용자에게 Single Sign-On을 제공할 수 있다.
암호 도난 위험 부담이 적다.
qwer1234!
와 같이 기억하기 쉬운 암호를 선택하고 여러 계정에서 동일한 암호를 사용하는 경우가 많다. 이런 경우 암호가 유추될 위험이 높다. 또한, 한 계정의 암호가 노출되면 다른 계정에도 액세스할 수 있다. OIDC를 사용하면 암호를 하나로 통일할 수 있기 때문에 더 강력하고 안전한 암호를 사용할 가능성이 높다.보안 제어 수준 향상
다단계 인증은 계정 손상을 줄이기 위한 검증된 방법이다. 또한 조직은 OIDC를 사용하여 여러 앱에서 권한 있는 액세스 관리, 암호 보호, 로그인 보안 또는 ID 보호와 같은 다른 보안 조치를 적용할 수 있다.
사용자 환경 간소화
여러 계정에서 로그인하면 시간이 오래 걸리고, 사용자에게 불편을 초래할 수 있다. 암호를 분실하거나 잊어버린 경우 암호를 다시 설명하면 생산성이 저하될 수 있다. OIDC를 사용하여 Single Sing-On을 제공하면 생산성 높은 작업에 더 많은 시간을 소비하도록 한다. 또한 Facebook, Google과 같은 소셜 미디어로 로그인할 수 있는 경우 고객이 서비스에 등록하고 서비스를 사용할 가능성이 높아진다.
인증 표준화
OIDC를 작성한 OpenID Foundaton에는 Microsoft 및 Google과 같은 주요 브랜드가 포함되어 있다. OIDC는 상호 운용이 가능하도록 설계되었으며 ios, Android, 주요 클라우드 및 ID 공급자를 비롯한 여러 플랫폼, 라이브러리를 지원한다.
출처
https://www.microsoft.com/ko-kr/security/business/security-101/what-is-openid-connect-oidc
https://learn.microsoft.com/ko-kr/entra/identity-platform/v2-protocols-oidc