OAuth 프로토콜의 이해

velgmzz·2023년 8월 17일
0

CS

목록 보기
1/1
post-thumbnail

1. OAuth?

OAuth 2.0 (Open Authorization 2.0, OAuth2)은 인증을 위한 개방형 표준 프로토콜이다.
위키백과의 OAuth 정의는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단이라 한다.
사용자들이 Google, Naver, Kakao 등의 웹사이트의 계정에 관한 정보를 공유할 수 있게 허용해주는 것이다. 위 사이트 등에서 제공하는 간편 로그인 기능도 OAuth2 기반의 사용자 인증 기능이다.

2. OAuth 구성 요소

OAuth에서 나오는 각 역할과 용어들은 많이 헷갈리니 정리하여 알아둘 필요가 있다.

2-1. 역할

여기서 Client, Resource Owner의 명칭 때문에 헷갈릴 수 있다.
Client는 사용자가 아닌 Service 또는 Application을 뜻하며, 우리가 개발하려는 서비스가 된다.

Resource Owner는 웹 서비스를 이용하려는 사용자, 자원을 소유하는 자로 Resource는 개인정보라고 생각하면 된다.

데이터를 가지고 있는 서버인 Resource Server와 인증과 관련된 처리를 전담하는 서버 Authorization Server를 합쳐 Resource Server라 부른다.

2-2. Authentication vs Authorization

3. Application 등록

3-1. OAuth의 메커니즘

OAuth 서비스를 이용하기 위해서는 Client를 Resource Server에 등록해 사용한다.
이 글에서는 Kakao를 사용하니 한번 읽어보는 걸 추천한다.

Kakao 로그인 이해하기

3-2. 서비스 등록

Kakao Developers OAuth

등록을 마치면 Client ID, Client Secret, Authorized redirect URL 받을 수 있다.

  • Client ID: 우리가 개발하고 있는 애플리케이션의 식별자.
  • Client Secret: Client ID에 대한 비밀번호.
  • Authorized redirect URL: Resource Server가 권한을 부여하는 과정에서 Authorized code를 redirect URI 주소로 전달해준다.

3-3. 사용자의 로그인 요청(Authorization code)

사용자(Resource Owner)는 Client가 제공하는 카카오 로그인, 구글 로그인을 누르게 되면 Resource Server에 요청할 주소 http://resource.server...로 접속하고 Resource Server는 현재 로그인 여부를 확인한다. 그림 출처 생활코딩

로그인이 안 되어있다면 Server는 Login Page를 제공하고 사용자가 ID/PW를 입력 후 등록돼있는 Scope의 권한을 Client에 제공할 것인지 확인한다.

Authorization Code

위의 과정은 사용자는 로그인하고 Scope 동의를 받은 후 Resource Server는 사용자에 대한 정보를 저장해둔 상태이다. 이때 Owner에 Authorization Code를 주게 된다. OAuth는 Owner, Client, Server 제삼자 간 인증 방법이기에 보안 절차를 거친다. 이 Code는 Client가 Access token을 얻기 위한 임시 비밀번호라고 볼 수 있다.

3-4. Access token

Client는 Owner에서 받은 Authorization Code와 Client ID, Client Secret으로 Resource Server에 직접 접근하여 Access Token을 받는다.

Server는 Code, Secret, redirect url를 확인하고 완전히 일치하면 Client에 Access token을 응답해준다. 이 Access token과 일치하는 사용자의 Scope를 Client에 제공해준다.

참고


생활코딩 OAuth 이해하기

[Passport-kakao를 이용한 Kakao 로그인 구현하기]

profile
정리하며 공부하는 블로그, React/Next를 공부합니다

1개의 댓글

comment-user-thumbnail
2023년 8월 17일

훌륭한 글 감사드립니다.

답글 달기