본문 바로가기

네트워크

OAuth

반응형

API 이용 시 인증과 리소스에 대한 권한부여는 필수사항입니다.

인증과 권한부여의 대표적인 방법 중 하나가 OAuth 입니다.

 

1. 정의

OAuth란 Open Authorization, Open Authentication 을 뜻하는 것으로 어플리케이션(페이스북, 구글, 트위터) 유저의 비밀번호를 Third party 앱에 제공하지 않고 인증, 인가를 할 수 있는 open standard protocol입니다.

OAuth인증을 통해 어플리케이션  API를 유저 대신 접근할 수 있는 권한을 얻을 수 있습니다.

 

기존 방식

  • - 외부 사이트와 인증 기반의 데이터 연동 시 인증 방식의 표준이 없다.
  • - 기본 인증인 id, pw를 사용하여 인증
  • - 사용자의 pw 노출 우려가 큰 보안상 취약한 구조

 

OAuth 1.0

  • 기존과는 다르게 API를 제공하는 서버에서 진행
  • 사용자가 인증되었다는 Access Token을 발급
  • 발급된 Access Token으로 Third Party 어플리케이션에서는 Service Provider의 API를 안전하고 쉽게 사용 가능

2. OAuth에서 사용되는 용어

User Service Provider에 계정의 가지고 있으면서 Consumer앱을 이용하려는 사용자
Service Provider OAuth를 사용하는 Open API를 제공하는 서비스 (Facebook, Google 등)
Protected Resource Service Provider로부터 제공되어지는 API 자원들
Consumer OAuth 인증을 사용해 Service Provider의 기능을 사용하려는 애플리케이션이나 웹 서비스
Consumer Key Consumer가 Service Provider에게 자신을 식별하는데 사용하는 키
Consumer Sercret Consumer Key의 소유권을 확립하기 위해 Consumer가 사용하는 Secret
Request Token Consumer가 Service Provider에게 접근 권한을 인증받기 위해 사용하는 값으로 인증이 완료된 후에는 Access Token으로 교환된다.
Access Token 인증 후 Consumer가 Service Provider의 자원에 접근하기 위한 키를 포함한 값
Token Secret 주어진 토큰의 소유권을 인증하기 위해 소비자가 사용하는 Secret

 

3. OAuth의 WorkFlow

- Service Provider로 부터 Consumer Key, Consumer Secret을 발급받는다. 이를 통해 Service Provider는 Consumer를 식별할 수 있다.

- A&B: Consumer정보, Signature 정보를 포함하여 Request Token을 요청하고 Service Provider로부터 Request Token을 발급받는다.

- C: Consumer는 User를 Service Provider 인증 사이트로 다이렉트 시키고 User는 그곳에서 Service Provider의 User임을 인증한다.

- D: Service Provider는 해당 User가 인증되면 OAuth_token 과 OAuth_verifier를 넘겨준다.

- E: Consumer가 서명을 만들어 Access Token을 요청한다.

- F: Servie Provider는 받은 토큰과 서명들이 인증 되었으면 Access Token을 넘긴다.

- G: Access Token 및 서명 정보를 통해 Service Provider에 Protected Resource에 접근할 수 있게 된다.

 

 

OAuth2.0

OAuth1.0 User의 인증플로우, 목적만 공유하고 OAuth1.0을 새로 작성한 것입니다.

앱, 웹, 데스크탑 어플리케이션 등의 인증방식을 강화하고 Consumer 개발 간소화를 중심으로 작성된 것입니다.

 

OAuth2.0 은 인증 절차가 간소화됨으로써 개발자들이 구현하기 더 쉬워졌습니다.

기존에 사용하던 용어가 바뀌었으며 Authorization Server와 Resource Server의 분리가 명시적으로 되었습니다. 

또한, 다양한 인증 방식을 지원하고 있습니다.

 

1. 인증 절차 간소화

  • 기능의 단순화, 기능과 규모의 확장성 등을 지원하기 위해 만들어졌습니다.
  • 기존의 OAuth1.0은 디지털 서명 기반이었지만 OAuth2.0의 암호화는 https 에 맡겨 복잡한 디지털 서명에 관한 로직을 요구하지 않기 때문에 구현자체가 개발자 입장에서 쉬워졌습니다.

2. 용어 변경

  • Resource Owner : 사용자
  • Resource Server : REST API 서버(1.0 Protected Resource)
  • Authorization Server: 인증 서버(API서버와 같을 수도 있음, 1.0 Service Provider)
  • Client: Third Party 어플리케이션(1.0 Consumer)

3. Resource Server와 Authorization Server 의 분리

  • 인증서버를 별도로 분리해둠
  • Authorization Server의 역할을 명확히 함

4. 다양한 인증 방식(Grant_type)

  • Authorization Code Grant
  • Implicit Grant
  • Resource Owner Password Credentials Grant
  • Client Credentials Grant
  • Device Code Grant
  • Refresh Token Grant

5 인증 디테일

 

5.1 Authorization Code Grant 

- 주특징

일반적인 웹사이트에서 소셜로그인과 같은 인증을 받을 때 가장 많이 쓰는 방식

 

 

 

 

 

정리

OAuth는 서버와 클라이언트 사이에 인증 완료 시 권한부여의 결과로 엑세스 토큰(Access Token)을 발급하고 이 엑세스 토큰을 이용해 클라이언트는 API에 접근 및 서비스를 요청하게 됩니다. 

서버는 엑세스 토큰 기반으로 서비스와 권한에 대한 접근 여부를 판단해 데이터를 제공합니다.

 

 

출처: https://minwan1.github.io/2018/02/24/2018-02-24-OAuth/

 

반응형

'네트워크' 카테고리의 다른 글

L2 네트워크  (0) 2022.11.04
[통신] Http 프로그래밍, socket 프로그래밍  (0) 2021.07.27
통신종료  (0) 2020.09.18
TLS/SSL  (0) 2019.12.26
LDAP  (0) 2019.11.24