OAuth 2.0 API 이해

anjiyoo·2025년 1월 25일

개발

목록 보기
3/5
post-thumbnail

OAuth 2.0 이란?

OAuth(Open Authorization)는 권한 부여를 위한 표준 프로토콜이다.
OAuth 프로토콜을 사용하기 전에는 사용자가 서비스에 접속하여 다른 서비스에 접근할 수 있도록 서비스와 다른 서비스에 사용자 id와 pwd를 저장하여 id, pwd 일치 시 해당 사용자의 정보를 전달하였다고 한다.이는 보안적으로 큰 문제가 발생할 수 있는 방법으로 이 방법 대신 사용 하는 것이 바로 OAuth 이다.

OAuth 자체는 코드나 구현체가 아니라 현하기 위해 따라야 할 설계 원칙과 흐름이 적힌 문서


OAuth 2.0 개념

OAuth는 제3자 애플리케이션(Client)사용자(Resource Owner)의 자격 증명(id, pwd 등)에 직접 접근하지 않고 사용자의 자원(Resource Server)에 안전하게 접근할 수 있도록 권한을 위임하는 방식(Access Token 발급)을 제공한다.


OAuth 2.0 등록 방법

Client가 Resource Server를 이용하기 위해서는 Resource Server의 승인을 사전에 받아야 하는데 그것을 바로 등록이라 한다. 서비스마다 등록하는 방법은 다르지만 공통적으로 아래 세가지가 필요하다.

  • Client ID : 애플리케이션(서비스)를 식별하는 식별자 ID
  • Client Secret : 식별자 ID의 PWD *외부에 노출되면 안되는 정보
  • Authorized redirect URls : Authorized Code를 전달받을 주소 *다른 url의 요청은 무시됨
  • scope : Resource Server에서 사전에 사용 가능하도록 미리 정의한 기능

구글 애플리케이션 등록 : https://console.cloud.google.com
네이버 애플리케이션 등록 : https://developers.naver.com/main/


Resource Owner 승인

등록을 완료하면 Resource ServerClient는 아래 정보를 알게 된다.

  • Client Id
  • Client Secret
  • redirect URL

ClientResource Server의 기능 중 일부 기능만 필요하다 하면 모든 기능에 대한 인증을 받는 것이 아닌 해당 기능에 대한 인증만 받으면 된다.

사용자가 애플리케이션에 접속한다고 가정해보자.

1.애플리케이션 접속
2.구글 로그인 버튼 클릭
3.구글 로그인 코드와 같이 특정한 url이 구글 서버쪽으로 보내짐
4.사용자가 구글 로그인 되어 있는지 확인하고 로그인이 안되어 있으면 로그인 요청
5.사용자 로그인 후에 서버에서 애플리케이션 등록 정보와 같은지 확인
6.Client Id, Client Secret, redirect URL이 같다면 scope에 해당되는 권한을 부여할 것인지 사용자에게 확인

# 구글 로그인
https://resource.server/
?client_id=1
&scope=B,C
&redirect_uri=https://client/callback
# 서버의 요청을 사용자가 허용
client id : 1
client Secret : 2
redirect URL : https//client/callback
  user id : 1
  scope : b,c

Resource Server 승인

Resource Owner가 허용하면 Resource Server는 Access Token 발급을 진행한다.

OAuth의 목적은 Access Token을 발급하는 것이다.

Resource Owner 승인 과정에서 user id:1scope:b,c에 대한 작업을 client_id=1에게 허용한다 까지 처리했다. Resource Server 승인 과정은 아래 순서와 같다.

1.사용자의 승인을 허용받으면 서버는 사용자에게 authorization code를 전송
2.서버가 사용자 웹브라우저에게 https:///clinet/callback?code=3 로 이동 명령
3.애플리케이션은 authorization code를 사용자로부터 전달받음
4.애플리케이션은 authorization codeclient_secret을 이용해 사용자를 거치지 않고 서버에 직접 전송
5.서버는 authorization code, client_id, redirect_uri, client_secret 의 값을 확인한 후 Access Token 발급

# 서버가 사용자에게 authorization code를 전송
# Location : https:///clinet/callback?code=3

client id : 1
client Secret : 2
redirect URL : https//client/callback
  user id : 1
  scope : b,c
  authorization code : 3
# 애플리케이션은 authorization code를 서버에 직접 접속

https://resource.server/token
?grant_type=authorization_code
&code=3
&redirect_uri=https://client/callback
&client_id=1
&client_secret=2

Access Token 발급

서버는 authorization code을 통해 애플리케이션을 인증하고 Access Token 발급을 아래 과정으로 진행한다.

1.서버는 authorization code를 삭제하고 Access Token을 발급한다.
2.서버는 Access Token을 애플리케이션에게 응답한다.
3.애플리케이션은 응답받은 Access Token값을 저장한다.
4.Access Token은 애플리케이션이 같은 Access Token으로 접근하면 user id, scope의 정보를 허용한다.


OAuth 2.0 API 호출

애플리케이션이 서버를 호출해서 어떤 것을 하려할 때 API를 사용해서 조작한다.
구글 경우 Access_token 쿼리 매개변수로 사용하는 방법과 Authorizion을 HTTP 헤더 Bearer값을 포함하여 사용하는 방법이 있다.

Google Calendar API : https://developers.google.com/calendar/api/v3/reference?hl=ko

Google API 호출 메뉴얼 : https://developers.google.com/identity/protocols/oauth2/web-server?hl=ko#httprest_5

# HTTP GET 예시 (Google CalendarList 가져오기)
# 주소창 입력

https://www.googleapis.com/calendar/v3/
users/me/calendarList
?access_token=access_token
# curl 예시 (Google CalendarList 가져오기) *권장
# cmd 입력

curl -H "Authorization: Bearer 
access_token" 
https://www.googleapis.com/calendar/v3/
users/me/calendarList
profile
기록으로 흔적을 남기는 것을 좋아합니다

0개의 댓글