OpenID vs. OpenID Connect
인증과 권한 부여는 현대 웹 애플리케이션의 핵심 보안 요소로, 다양한 표준과 프로토콜이 개발되어 왔다. 그중에서도 OpenID와 OpenID Connect는 사용자 인증을 위한 중요한 표준이다. 이 두 기술은 이름이 유사하여 혼동되기 쉽지만, 근본적인 목적과 구현 방식에는 중요한 차이점이 있다.
역사적 배경 및 발전 과정
OpenID
OpenID는 2005년 Brad Fitzpatrick가 처음 개발한 분산형 인증 프로토콜이다. 당시 인터넷은 사용자가 각 웹사이트마다 새로운 계정을 생성해야 하는 불편함이 있었고, 이를 해결하기 위해 등장했다.
OpenID의 주요 발전 단계:
- 2005년: OpenID 1.0 발표
- 2006년: OpenID 1.1 릴리스
- 2007년: OpenID 2.0 표준화 - 보안 강화 및 확장성 개선
- 2008년 이후: Google, Yahoo, Microsoft 등 주요 기업들이 OpenID 제공자로 참여
OpenID Connect
OpenID Connect는 2014년에 정식으로 표준화된 인증 프로토콜로, OpenID Foundation에서 개발했다. OpenID의 한계점을 개선하고 OAuth 2.0을 기반으로 구축되었다.
OpenID Connect의 주요 발전 단계:
- 2010년: OpenID Foundation에서 OpenID Connect 작업 시작
- 2011년: 초기 규격 발표
- 2014년: OpenID Connect Core 1.0 최종 규격 발표
- 2015년 이후: Google, Microsoft, Auth0 등이 적극적으로 채택
- 현재: 대부분의 최신 ID 관리 시스템에서 표준으로 사용됨
기본 개념 및 작동 원리
OpenID의 작동 원리
OpenID는 사용자가 여러 웹사이트에서 동일한 디지털 ID를 사용할 수 있게 해주는 분산형 인증 프로토콜이다.
- 제공자 중심: 사용자는 OpenID 제공자(예: Yahoo, Google)에서 자신의 ID를 설정한다.
- URL 기반 식별자: 사용자의 ID는 URL 형태(예: username.myopenid.com)로 표현된다.
- 인증 과정:
- 사용자가 웹사이트(RP: Relying Party)에 OpenID URL을 입력한다.
- 웹사이트는 URL을 확인하고 해당 OpenID 제공자로 사용자를 리디렉션한다.
- 사용자는 OpenID 제공자에 로그인한다.
- 인증 후, 제공자는 사용자를 원래 웹사이트로 리디렉션한다.
- 웹사이트는 인증 결과를 확인하고 사용자에게 접근 권한을 부여한다.
OpenID Connect의 작동 원리
OpenID Connect는 OAuth 2.0 프로토콜 위에 구축된 ID 계층으로, 인증과 기본적인 사용자 정보를 제공한다.
- OAuth 2.0 기반: 인증뿐만 아니라 권한 부여도 처리할 수 있다.
- JWT 토큰 사용: JSON Web Token을 사용하여 인증 정보와 클레임을 안전하게 전달한다.
- 인증 과정:
- 클라이언트 애플리케이션이 사용자를 OpenID Connect 제공자(예: Google)로 리디렉션한다.
- 사용자가 제공자에 로그인하고 권한을 부여한다.
- 제공자는 권한 코드를 발급하고 사용자를 클라이언트로 리디렉션한다.
- 클라이언트는 권한 코드를 사용하여 ID 토큰과 액세스 토큰을 요청한다.
- 클라이언트는 ID 토큰을 검증하고 필요에 따라 액세스 토큰을 사용하여 추가 정보를 요청한다.
기술적 구현 및 프로토콜 비교
프로토콜 구조
- OpenID
- 프로토콜 구조: 독립적인 프로토콜
- 메시지 형식: XML 기반
- 인증 방식: 다양한 인증 방식 지원(비밀번호, 디지털 인증서 등)
- 규격: 복잡하고 확장이 어려운 경향이 있음
- OpenID Connect
- 프로토콜 구조: OAuth 2.0 위에 구축된 계층
- 메시지 형식: JSON 기반
- 인증 방식: OAuth 2.0 인증 플로우 사용
- 규격: 모듈화된 구조로 확장성이 우수함
인증 흐름
- OpenID 인증 흐름
- 사용자가 Relying Party(RP)에 OpenID 제공자 URL을 제공
- RP가 제공자의 엔드포인트를 발견(Discovery)
- 필요시 RP와 제공자 간에 연결 설정(Association)
- RP가 사용자를 제공자로 리디렉션
- 사용자가 제공자에 인증
- 제공자가 사용자를 RP로 리디렉션하며 인증 응답 포함
- RP가 응답 검증
- OpenID Connect 인증 흐름
- 클라이언트가 사용자를 OpenID Provider(OP)로 리디렉션
- 사용자가 OP에 인증 및 권한 부여
- OP가 사용자를 권한 코드와 함께 클라이언트로 리디렉션
- 클라이언트가 백채널을 통해 OP에 권한 코드로 토큰 요청
- OP가 ID 토큰과 액세스 토큰 발급
- 클라이언트가 토큰 검증 및 사용자 인증 완료
- 선택적으로 UserInfo 엔드포인트에서 추가 정보 획득
토큰 및 보안
- OpenID
- 인증 증명: 서명된 어설션(assertion) 사용
- 프로토콜 보안: 연결 설정 시 DH(Diffie-Hellman) 키 교환 사용
- 확장성: Simple Registration(SREG), Attribute Exchange(AX) 확장을 통한 사용자 정보 교환
- OpenID Connect
- 토큰 유형:
- ID 토큰: 사용자 인증 정보를 포함한 JWT
- 액세스 토큰: API 접근을 위한 OAuth 2.0 토큰
- 리프레시 토큰: 새로운 액세스 토큰 발급을 위한 토큰
- 프로토콜 보안: TLS, JWT 서명 및 암호화, CSRF 방지 상태 매개변수
- 스코프: 클라이언트가 요청할 수 있는 사용자 정보의 범위 지정 가능
- 토큰 유형:
주요 차이점 및 장단점
OpenID의 장단점
장점:
- 분산형 구조로 단일 실패 지점이 없음
- URL 기반의 직관적인 ID 체계
- 다양한 인증 방식 지원
단점:
- 구현이 복잡하고 개발자 친화적이지 않음
- 모바일 환경 지원이 제한적
- 사용자 경험이 다소 불편할 수 있음
- 권한 부여 기능이 부족
OpenID Connect의 장단점
장점:
- OAuth 2.0과의 통합으로 인증과 권한 부여를 동시에 처리
- JWT 기반의 표준화된 클레임 세트
- 개발자 친화적인 JSON 기반 프로토콜
- 모바일 애플리케이션 지원이 우수
- 다양한 인증 플로우 제공(Authorization Code, Implicit, Hybrid)
단점:
- 구현 복잡성(특히 보안 측면)
- 중앙 집중식 제공자에 대한 의존성 증가
- OAuth 2.0의 보안 취약점을 상속할 수 있음
5. 사용 사례 및 적용 분야
OpenID 주요 사용 사례
- 블로그, 포럼, 커뮤니티 사이트 인증
- 단순한 SSO(Single Sign-On) 구현
- 사용자 중심의 분산 ID 관리
OpenID Connect 주요 사용 사례
- 엔터프라이즈 SSO 솔루션
- 모바일 애플리케이션 인증
- API 기반 서비스와의 통합
- 마이크로서비스 아키텍처의 인증 및 권한 부여
- B2B, B2C 시나리오의 사용자 관리
현재 상태 및 미래 전망
현재 상태
- OpenID: 대부분의 주요 제공자들이 OpenID 2.0 지원을 중단했으며, 새로운 구현은 드문 상황
- OpenID Connect: 대부분의 ID 제공자(Google, Microsoft, Okta, Auth0 등)가 지원하며 업계 표준으로 자리잡음
미래 전망
- 분산 ID: OpenID Connect는 분산 ID 및 자체 주권 ID(Self-Sovereign Identity) 분야로 발전 중
- FIDO 통합: 생체 인식과 같은 강력한 인증 방법과의 통합
- IoT 인증: 사물 인터넷 기기 인증을 위한 확장
- 암호화폐 및 블록체인 통합: 탈중앙화된 ID 관리 시스템과의 통합
OpenID와 OpenID Connect 비교
특성 | OpenID | OpenID Connect |
---|---|---|
출시 연도 | 2005년 | 2014년 |
기반 프로토콜 | 독립적인 프로토콜 | OAuth 2.0 기반 |
설계 목적 | 단순 인증(Authentication) | 인증 및 권한 부여(Authorization) |
ID 형식 | URL 기반 | 클레임 기반 JWT |
데이터 형식 | XML | JSON |
토큰 체계 | 어설션(Assertion) | JWT(ID 토큰), 액세스 토큰, 리프레시 토큰 |
사용자 정보 제공 | SREG/AX 확장을 통해 제한적 | 표준화된 클레임 세트와 UserInfo 엔드포인트 |
인증 흐름 | 단일 인증 흐름 | 다양한 흐름(Authorization Code, Implicit, Hybrid) |
모바일 지원 | 제한적 | 우수함 |
개발자 친화성 | 복잡하고 구현이 어려움 | 상대적으로 단순하고 문서화가 잘 되어 있음 |
현재 상태 | 레거시, 대부분 서비스에서 중단됨 | 업계 표준으로 활발히 사용 중 |
주요 제공자 | 과거: Yahoo, Google, MyOpenID 등 | 현재: Google, Microsoft, Auth0, Okta 등 |
확장성 | 제한적 | 높음(다양한 선택적 기능과 확장) |
보안 특성 | DH 키 교환, 서명된 어설션 | TLS, JWT 서명 및 암호화, CSRF 방지 등 |
세션 관리 | 제한적 | 세션 관리 명세 존재 |
리소스 접근 | 지원하지 않음 | 액세스 토큰을 통해 지원 |
스코프 개념 | 제한적 | 광범위하게 지원(openid, profile, email 등) |
Discovery 메커니즘 | XRDS 문서 | JSON 기반 OpenID Connect Discovery |
활용 사례 | 단순 웹사이트 로그인 | 웹, 모바일, API, 엔터프라이즈 SSO |
구현 예제 비교
OpenID 구현 예제
|
|
OpenID Connect 구현 예제
|
|
용어 정리
용어 | 설명 |
---|---|