[Server] 서버 인증 이해하기-3부 (OAuth 기본편)

웹 서비스를 이용하면서 로그인이 필요할 때 위와 같은 로그인 창을 쉽게 찾아볼 수 있다. 해당 웹 사이트를 위한 회원가입 없이 로그인을 제공하는 플랫폼(네이버, 카카오, 페이스북 등)의 계정만 있으면 서비스를 이용할 수 있다. 이렇게 외부 서비스에서 인증을 가능하게 하고, 그 서비스의 API를 이용하게 할 수 있다. 이 때 사용되는 프로토콜이 바로 지금 살펴볼 OAuth이다.


OAuth

OAuth(Open Authorization)는 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹 사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 접근 위임을 위한 개방형 표준이다.

OAuth를 쓰는 이유

1. 사용자 입장

로그인이 필요한 많은 사이트마다 계정 정보를 생성하고 제공하고 싶지 않은 입장이다.

우선 계정 정보를 관리하기 어려운 단순한 이유가 있다. 또한 개인 정보를 여러 곳에서 관리하며,

피싱에 노출되고 또한 해당 사이트가 보안적으로 안전하다는 보장이 없다는 문제가 있다.

2. 개발자 입장

회원가입/로그인 기능을 쉽게 구현할 수 있다.

네이버 로그인, 카카오 로그인, 구글 로그인 등을 통하여 해당 회원 정보를 안전하게 가져다가 사용할 수 있다고 생각하면 된다. 개발자의 사이트를 이용하는 고객들의 네이버 회원 정보를 안전하게 가져와서 쓸 수 있다.

OAuth의 시발점이 되던 시점에는 인증과 권한으로 이러한 입장들의 요구를 만족시킬 수 있는 인증 방식이 존재하지 않았고, 트위터의 주도로 OAuth1.0이 만들어지게 되었다.


OAuth1.0

구성(3-legged-auth)

– user(=사용자=Resource Owner)

– consumer(=OAuth 기능 고객=Client)

– service provider(OAuth 제공자=Authorization Server+Resource Server)

OAuth2.0 탄생 배경

구현이 복잡하고, 웹이 아닌 애플리케이션에서의 지원이 부족하다. HMAC*을 통해 암호화를 하는 복잡한 과정이 있다. 또한 Access Token이 만료되지 않는다는 치명적인 단점이 있다. Token이 만기되지 않으면, Token정보가 노출되었을 시 보안에 취약하기 때문이다.


OAuth2.0

OAuth1.0에서 나아진 점

– 기능의 단순화, 규모의 확장성 등을 지원한다.

– https를 필수로 사용하여 암호화한다.

– 2.0은 다양한 인증 방식을 지원한다.

– 인증서버와 리소스서버를 분리하였다.

구성

Resource Owner: 로그인을 제공하는 플랫폼(네이버, 카카오, 페이스북 등)에 회원가입을 하여 계정을 가지고 있으며 Client가 제공하는 서비스를 이용하려는 사용자. Resource Server에 계정을 가지고 있는 사용자. (Resource는 개인정보라고 생각하면 된다.)

Client: OAuth2.0을 이용해 로그인 기능을 구현할 주체 서비스이다.

Authorization Server: 사용자의 동의를 받아서 권한을 부여하는 서버이다. 사용자는 이 서버로 ID/Password를 넘겨 인증 코드를 발급받는다. Client는 이 서버로 인증 코드를 넘겨 Access Token을 발급받는다.  

Resource Server(API Server): 사용자의 개인정보를 가지고 있는 웹 애플리케이션(네이버, 카카오, 페이스북 등)서버이다. Client는 Access Token을 이 서버로 넘겨 개인정보를 응답받는다.


인증 유형(Authorization Grant Types)

– Authorization Code

– Implicit

– Resource Owner Password Credentials

– Client Credentials


마치며

OAuth의 기본 개념에 대해 알아보았다. OAuth2.0의 여러 유형의 상세 동작 방식과, OAuth 인증에 필수적으로 사용되는 Access Token 에 대해 알아보도록 하자.


출처

https://showerbugs.github.io/2017-11-16/OAuth-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

https://hwannny.tistory.com/92

https://devbksheen.tistory.com/39

https://jwt.io/introduction

Leave a Comment