OAuth 2.0 과 이를 이용하는 프로토콜들 분석
Firebase Auth 서비스를 이용해 여러 로그인 연동처리를 진행하던 중, 기반 기술 이해를 위해 리서치한 내용을 기록한다.
OAuth 2.0
글에 앞서, OAuth2를 사용하는 궁극적인 목적을 먼저 이해하는것이 좋아보인다.
OAuth2.0의 궁극적인 목적은, "우리의 서비스를 이용하는 유저의 명의로 제3업체의 서비스를 이용하는 것"이다. 예를들면 아래 상황들이 있다.
1. 유저의 신원을 알기위해, 우리가 정한 제 3업체(구글,애플 등등..)로부터 해당 유저의 신원을 신원조회 API를 이용해 알아낸다. -> 구글로그인,애플로그인 등등..
2. 우리 앱을 통해 예약하면, 해당 유저의 구글 캘린더에 자동으로 업데이트 해준다
3. ~~
OAuth 2.0 용어, 프로토콜 상세
OAuth 2.0 관련 문서를 읽거나 이를 이용한 기술을 이해하려면, 3가지 용어에 대한 이해가 필요하다
1. Client - 우리가 제작하는 서버
2. Resource owner - 서비스 이용자
3. Resource Server(+Authorization Server) - 제 3의 서비스제공 업체
과정에 대해 간략하게 정리해보자면
1. 제 3업체에게 우리앱의 id, secret, 우리가 원하는 서비스 scope등을 미리 등록한다
2. 유저를 제 3업체에 로그인 시킨다
3. 로그인 시키면서 우리앱의 id 등을 함께 보내며 우리가 원하는 서비스 scope를 이용하는 것을 허락할것이냐는 의미의 화면을 노출시킨다
4. 로그인이 되면 제3업체에서 미리 약속해둔 우리 앱의 API에 authorization_code를 보낸다(redirect uri)
5. 우리앱은 제3업체에 해당 authorization_code와 client_id, secret으로 해당 유저의 access token을 발급받는다
6. 발급받은 token으로 해당유저에 대한 서비스 API를 호출해 서비스를 이용할 수 있게 된다
결국 아래 그림이다(https://velog.io/@jakeseo_me/Oauth-2.0%EA%B3%BC-OpenID-Connect-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%A0%95%EB%A6%AC 출처..)
Firebase Auth
Firebase Auth는 위에서 1번을 이용해 여러 대기업(구글,애플,마소..등등) 로부터의 사용자 인증기능을 통합하여 제공하고 있다.
Firebase Auth를 사용하는 서비스는 제 3업체로부터 OAuth2 ClientId, Secret를 발급받아서 FIrebase Auth에 제공하면, Firebase Auth가 우리를 대신하여 해당업체들과 OAuth2 프로토콜로 인증을진행하고 해당 업체들로부터의 유저의 고유Id를 조회해 통합 유저로 등록하는 것이다.
OpenID Connect(OIDC) 프로토콜
OAuth 2.0 은 인가를 위해 사용, OpenID Connect는 인증을 위해 사용된다고 보면 된다. oauth 를 인증을 위해 사용하는 OAuth2.0 의 상위 계층에 존재한다.
OAuth는 유저의 타 서비스 엑세스토큰을 제공한다. OpenID Connect는 해당 엑세스토큰을 통해 타 서비스의 인증 시스템을 이용하여 사용자를 판단할 수 있게 해준다. 타 서비스에 유저로그인 및 동의를 요청할때 openid 라는 스코프를 정의하면 OpenID Connect 사용이 가능하다.
참고
The Complete Guide to OAuth 2.0 and OpenID Connect Protocols
https://betterprogramming.pub/the-complete-guide-to-oauth-2-0-and-openid-connect-protocols-35ebc1cbc11a