8월 23일 -OAuth

Yullgiii·2024년 8월 26일
0

OAuth

Open Authorization

OAuth는 인터넷 사용자들이 비밀번호를 제공하지 않고도 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 개방형 표준 방법이다. 이 매커니즘은 구글, 페이스북, 트위터 등에서 사용되며, 타사 애플리케이션과 웹사이트가 사용자 계정에 대한 정보를 안전하게 공유할 수 있도록 허용한다.

사용 용어

  • 사용자: 계정을 소유한 개인.
  • 소비자: OAuth를 사용해 서비스 제공자에게 접근하는 웹사이트 또는 애플리케이션.
  • 서비스 제공자: OAuth를 통해 접근을 지원하는 웹 애플리케이션.
  • 소비자 비밀번호: 서비스 제공자에서 소비자가 자신임을 인증하기 위한 키.
  • 요청 토큰: 소비자가 사용자에게 접근 권한을 인증받기 위해 필요한 정보가 담겨있음.
  • 접근 토큰: 인증 후에 사용자가 서비스 제공자가 아닌 소비자를 통해 보호 자원에 접근하기 위한 키 값.

토큰에는 두 가지 종류가 있다:

  • Access Token: 만료 시간이 있으며, 만료되면 다시 요청해야 한다.
  • Refresh Token: 만료되면 처음부터 인증 과정을 다시 진행해야 한다.

인증 과정

  1. 소비자 → 서비스 제공자: 소비자가 서비스 제공자에게 요청 토큰을 요청한다.
  2. 서비스 제공자 → 소비자: 서비스 제공자가 소비자에게 요청 토큰을 발급해준다.
  3. 소비자 → 사용자: 소비자가 사용자를 서비스 제공자로 이동시키며, 이 과정에서 사용자 인증이 수행된다.
  4. 서비스 제공자 → 사용자 → 소비자: 서비스 제공자가 사용자를 인증한 후, 소비자로 다시 이동시킨다.
  5. 소비자 → 서비스 제공자: 소비자가 접근 토큰을 요청한다.
  6. 서비스 제공자 → 소비자: 서비스 제공자가 접근 토큰을 발급한다.
  7. 소비자: 발급된 접근 토큰을 이용해 소비자는 사용자 정보에 접근한다.

예제 코드

OAuth 인증을 활용한 예제를 Python의 requests 라이브러리를 사용하여 작성해보았다.

import requests
from requests.auth import HTTPBasicAuth

# 소비자 키와 비밀번호 설정
client_id = 'your_client_id'
client_secret = 'your_client_secret'
token_url = 'https://example.com/oauth/token'

# 요청 토큰을 받기 위해 서비스 제공자에게 요청
response = requests.post(
    token_url,
    auth=HTTPBasicAuth(client_id, client_secret),
    data={'grant_type': 'client_credentials'}
)

# 요청 토큰을 받음
token = response.json().get('access_token')

# 접근 토큰을 사용하여 보호된 자원에 접근
protected_url = 'https://example.com/protected_resource'
headers = {'Authorization': f'Bearer {token}'}

protected_response = requests.get(protected_url, headers=headers)

# 결과 출력
print(protected_response.json())

위 예제는 requests 라이브러리를 사용하여 OAuth 인증 과정을 간단하게 구현한 것이다. 실제 사용 시에는 각 서비스 제공자의 OAuth API 문서에 맞게 코드를 수정해야 한다.

So...

OAuth는 사용자가 비밀번호를 제공하지 않고도 타사 애플리케이션이 자신의 계정에 접근할 수 있도록 하는 안전한 방법을 제공한다. OAuth의 핵심은 요청 토큰과 접근 토큰을 통해 사용자 정보를 보호하면서도 인증 과정을 수행하는 것이다. OAuth의 이러한 특성 덕분에 다양한 웹 애플리케이션에서 안전하게 사용자 데이터를 공유하고 관리할 수 있다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글