OpenID Connect
사용자 인증을 위한 기술이다. 내가 인증을 직접 구현하는 것이 아닌 구글, 페이스북, 트위터 같은 대규모 웹 사이트에 사용자의 인증 절차를 위임할 수 있는 기술이다. 이렇게 하면 사용자들은 웹사이트마다 ID를 만들고 인증을 하는 것이 아닌, 자신이 신뢰하는 대규모 사이트 (OpenID Provider라고 함, 구글, 트위터, 페이스북 등) 에서 제공하는 OpenID 인증 서비스 하나만으로 나를 인증할 수 있게 된다.
OpenID는 비영리기관인 OpenID Foundation에서 추진하는 개방형 표준 및 분산 인증 프로토콜이다. 즉 OpenID는 인증을 위해 등장했다. OAuth2.0 프로토콜의 최상위 레이어와 동일한 레이어이다. OpenID Connect는 OAuth 2.0을 확장하여 인증 방식을 표준화한 프로토콜이다.
OpenID Connect는 Authorization Server 에 의해 작동하는 인증 시스템을 기반으로 Client가 사용자를 판단할 수 있게 해준다. Authorization Server 에 유저 로그인 동의를 요청할 때, openid 라는 scope를 정의하면 OpenID Connect 사용이 가능하다. scope에 openid가 있다면 Access Token + ID Token을 함께 발급해준다. ID Token은 사용자에 대한 신원 정보가 담겨있다.
OpenID 주체
OpenID는 대표적으로 2가지의 주체를 가리키는 용어가 있다.
1. IdP (Identity Provider)
IdP는 구글, 카카오와 같이 OpenID 서비스를 제공하는 당사자이다.
2. RP (Relying Party)
사용자를 인증하기 위해 IdP에 의존하는 주체이다. 예를 들어 무신사에서 "구글 로그인하기"를 제공했다면 무신사가 RP이다.
OIDC 와 OAuth 2.0의 차이
1. 인증 vs 권한 부여
Oauth는 위임된 권한 부여 문제를 해결해준다. 하지만 사용자 인증을 위한 방법을 제공해주진 않는다.
- OpenID Connect은 사용자 인증을 위한 프로토콜이다. (로그인, 이 사용자가 누군지, 나는 A대학 학생이다)
- OAuth 2.0은 권한 부여를 위한 프로토콜이다. (해당 사용자가 어떤 데이터에 접근할 수 있는지? 난 공대 건물만 들어갈 수 있다)
2. OIDC는 OAuth2.0의 확장
OpenID Connect은 OAuth2.0의 확장으로, OAurh 2.0을 기반으로 하여 사용자의 인증 정보를 얻을 수 있는 기능을 추가한 것이다. 즉 OpenID Connect 은 "OAuth2.0 + 인증 기능"으로 권한과 위임을 모두 처리할 수 있는 프로토콜이다.
Oauth를 통해 "데이터"에 접근할 수 있는 Access Token을 획득할 수 있고, OIDC를 통해 사용자의 "신원 정보"가 담긴 ID Token을 획득할 수 있다.
OIDC를 쓰지 않고 OAuth2.0을 사용해서 간접적으로 사용자를 인증할 수 있다. Access Token을 통해 "사용자의 프로필 정보, 신원 정보"를 요청해서 접근할 수 있지만, 그럼 한번 더 통신을 해야하기 때문에 비용이 2배로 들게 된다. 비용 절감을 위해 OIDC를 사용하게 된다.
Reference
'TIL' 카테고리의 다른 글
[TIL-230829]CSRF (0) | 2023.08.29 |
---|---|
OAuth2.0 (0) | 2023.08.28 |
[TIL-230827]Filter Interceptor (0) | 2023.08.28 |
[TIL-230827] 인증과 인가 (0) | 2023.08.27 |
[TIL-230629] 서블릿(Servlet)이란? (0) | 2023.06.29 |