Akashic Records

Python 사용자 인증 (JWT) 받기 본문

Web Crawling for Beginners

Python 사용자 인증 (JWT) 받기

Andrew's Akashic Records 2024. 4. 25. 15:43
728x90

위는 파이썬 웹 크롤러 프로그램의 개념적 다이어그램을 나타낸 이미지입니다. 이 이미지는 컴퓨터 화면에 코드가 표시되고, 웹 서버와의 데이터 요청 및 응답을 상징하는 화살표가 흐름을 보여주는 모습을 단순하고 교육적인 스타일로 표현하고 있습니다. 컴퓨터는 'Web Crawler'로, 웹 서버는 'Website'로 레이블이 붙어 있습니다.

 

웹 API에 Authorization 헤더를 추가하여 JWT (JSON Web Token)를 사용한 인증 방법을 사용할 때는 requests 라이브러리의 headers 매개변수를 사용하여 요청을 보낼 수 있습니다. 이 방법은 API가 JWT 인증을 요구하는 경우 자주 사용됩니다.

 

JWT를 사용한 Authorization 헤더 설정 예제

import requests
from bs4 import BeautifulSoup

def fetch_jwt(response):
    # URL에서 웹 페이지를 가져옵니다.
    
    if response.status_code == 200:
        return response.headers.get('Authorization')
    else:
        return YOUR_JWT_TOKEN
        
def fetch_web_data(url):
    headers = {
        'Authorization': f'Bearer {YOUR_JWT_TOKEN}'
    }
    return requests.get(url, headers=headers)
    
def extract_title(response):
    
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        # <title> 태그의 내용을 추출합니다.
        title_tag = soup.find('title')
        
        return title_tag.text
    else:
        return None        

# 로그인 정보와 URL 설정
LOGIN_URL = "http://localhost:8088/api/user/login"
USERNAME = "admin"
PASSWORD = "xxxx"
DATA_URL = "http://localhost:8088/swagger-ui/index.html"


login_data = {
    'username': USERNAME,
    'password': PASSWORD
}

# Session 객체 생성
session = requests.Session()

# 로그인 요청 (Content-Type: application/json)
response = session.post(LOGIN_URL, json=login_data)
response.raise_for_status()  # 로그인 실패 시 예외 발생

# 로그인하고 첫번째 token
YOUR_JWT_TOKEN = response.headers.get('Authorization')
print("Login Token:", YOUR_JWT_TOKEN)

print("Response Headers:")
print(response.headers)

response = fetch_web_data(DATA_URL)

YOUR_JWT_TOKEN = fetch_jwt(response)

print("Token:", YOUR_JWT_TOKEN)

print("Page Title:", extract_title(response))

 

코드 설명

  1. JWT 토큰 준비: 실제 사용시 JWT 토큰은 로그인 과정을 통해 서버로부터 받게 되거나, 다른 인증 메커니즘을 통해 획득하게 됩니다. 토큰은 보안에 매우 중요하므로 안전하게 관리해야 합니다.
  2. Authorization 헤더 설정: HTTP Authorization 헤더를 설정할 때는 "Bearer" 다음에 공백을 두고 JWT 토큰을 넣습니다. 이 형식은 Bearer 토큰을 사용하는 표준 방식입니다.
  3. 요청 보내기: requests.get() 함수를 사용하여 API에 요청을 보냅니다. 이 때, headers 매개변수에 위에서 정의한 헤더 딕셔너리를 전달합니다.
  4. 응답 처리: 응답을 받고 JSON 형태로 파싱합니다. raise_for_status() 메소드는 요청이 실패한 경우(예: 401 Unauthorized, 403 Forbidden 등) 예외를 발생시켜 적절한 에러 핸들링을 할 수 있도록 합니다.

보안 주의사항

  • 토큰 유출 방지: JWT 토큰은 중요한 보안 정보를 포함하고 있으므로, 코드 내 하드코딩을 피하고 환경 변수나 보안이 강화된 설정 파일에서 관리하는 것이 좋습니다.
  • HTTPS 사용: 인증 정보를 포함한 모든 요청은 HTTPS를 통해 암호화되어야 합니다. 이는 중간자 공격(man-in-the-middle attacks)으로부터 토큰이 유출되는 것을 방지합니다.

이 예제는 JWT를 사용하여 인증이 필요한 API에 안전하게 접근하는 방법을 보여줍니다. 실제 사용 환경에서는 API의 인증 요구사항과 보안 정책에 맞게 코드를 조정해야 합니다.

728x90
Comments