OAuth2 (Open Authorization 2.0) 는 인증을 위한 개방형 표준 프로토콜입니다.
이 기능을 통해서 Naver, Kakao, Google 등에 로그인하는 방법으로 간편한 소셜 로그인을 구현할 수 있으며,
서버 혹은 클라이언트에서는 로그인된 해당 애플리케이션에서 사용자의 정보를 받아와 사용할 수 있습니다.
OAuth2 를 구성하는 역할을 소개하고 OAuth2를 사용해 로그인하는 과정을 순서대로 정리해보겠습니다.
구성
OAuth2 를 구성하기 위해서는 리소스 소유자(사용자), 클라이언트(애플리케이션 서버), 권한 서버, 리소스 서버가 필요합니다.
리소스 소유자는 로그인을 하는 주체입니다.
즉, Naver, Google 등에 로그인을 시도 할 사용자입니다.
클라이언트는 소셜 로그인을 통해 사용자의 정보를 접근 할 third-party 애플리케이션입니다.
간단하게 생각해서 애플리케이션의 서버라고 생각하시면 쉽습니다.
권한 서버는 리소스 소유자가 로그인을 성공했을 때 클라이언트에게 리소스 소유자의 사용자 접근 권한을 넘겨주는 서버입니다.
리소스 서버는 권한 서버로부터 클라이언트가 받은 리소스 사용자의 사용자 접근 권한을 통해 사용자 정보를 제공해주는 서버입니다.
로그인을 성공하는 과정을 통해 더 자세하게 살펴봅시다.
로그인 과정
네이버 클라우드에서 OAuth2 를 설명하는 그림이 있어서 가져왔습니다.
앞서 말한 리소스 소유자는 User, 클라이언트는 Client, 권한 서버는 Authorization Server, 리소스 서버는 Resource Server 입니다. ( 리소스 소유자를 사용자라 칭하겠습니다. )
위 그림의 순서를 따라가 봅시다.
먼저 사용자는 클라이언트에게 로그인 사용을 요청하고
클라이언트는 권한 서버에게 권한 부여 승인 코드를 요청하게 됩니다.
이 때, 미리 정의한 client_id 와 redirect_url, reponse_type 을 파라미터로 전달해주게 됩니다.
권한 서버는 이 정보를 토대로 로그인을 시도할 수 있는 창을 사용자에게 띄워줍니다.
사용자가 로그인을 시도해서 성공하면 권한 서버에서 redirect_url (클라이언트)로 권한 부여를 승인하는 코드를 전달합니다.
해당 코드를 통해 클라이언트는 권한 서버에게 리소스 서버로의 권한을 갖는 Access Token을 요청합니다.
권한서버가 클라이언트에게 Access Token을 성공적으로 전달해주면
클라이언트는 해당 토큰을 통해 리소스 서버에게서 사용자의 정보를 요청하여 받아올 수 있습니다.
클라이언트는 받아온 사용자 정보를 토대로 사용자에게 특정 응답을 해주며 로그인이 성공합니다.
마무리
이렇게 OAuth2를 통해 로그인하는 과정을 간단하게 알아봤습니다.
위 내용은 아주 거시적인 관점에서의 동작 순서를 살펴보며 OAuth2 가 어떤 것인지 알아봤다는 정도로만 생각해주시면 좋을 것 같습니다!!
이후에 OAuth2를 구현하기 위해서 Spring security와 JWT를 사용하는 예제를 통해 더 심화적인 내용을 다뤄보며 제가 고민했던 부분들도 함께 정리해보겠습니다.
Reference
https://datatracker.ietf.org/doc/html/rfc6749#section-1.1
https://guide.ncloud-docs.com/docs/b2bpls-oauth2
'WEB' 카테고리의 다른 글
JWT가 뭐죠? (0) | 2024.03.26 |
---|---|
[Trouble Shooting] 미디어 스트림 오류 ->> TypeError: Cannot read properties of undefined (reading 'getUserMedia') (0) | 2023.05.31 |
[Trouble Shooting] CORS 에러 ->> The request client is not a secure context and the resource is in more-private address space `private`. (0) | 2023.05.31 |
[Web] WebRTC를 활용한 화상통화 서비스의 서버 구성 (0) | 2023.05.02 |
[Web] WebSocket API / REST API (0) | 2023.04.13 |