파이썬과 JWT를 이용한 소셜 로그인 기능 구현 방법

소개

소셜 로그인은 사용자가 기존 계정 대신 소셜 미디어 계정을 사용하여 로그인하는 기능입니다. 이는 사용자 경험 및 편의성을 개선하고, 회원가입 절차를 간소화하는 데 도움이 됩니다. 이번 포스트에서는 파이썬과 JWT를 이용하여 소셜 로그인 기능을 구현하는 방법에 대해 알아보겠습니다.

사전 준비

  1. 파이썬 설치하기: 파이썬 공식 웹사이트에서 최신 버전의 파이썬을 다운로드하여 설치합니다.
  2. Flask 설치하기: 파이썬 패키지 관리자인 pip를 이용하여 Flask를 설치합니다. pip install flask 명령어를 터미널에서 실행합니다.
  3. 소셜 미디어 앱 등록하기: 각각의 소셜 미디어 플랫폼(예: Facebook, Google)에서 애플리케이션을 등록하고, 클라이언트 ID와 클라이언트 시크릿을 발급받아야 합니다.

소셜 로그인 기능 구현하기

1. 프로젝트 설정하기

먼저 Flask 프로젝트를 생성하고, 필요한 라이브러리를 설치합니다. 다음 코드를 터미널에 입력하여 시작합니다:

$ mkdir social-login
$ cd social-login
$ python -m venv venv
$ source venv/bin/activate
$ pip install Flask flask_jwt_extended requests

2. Flask 애플리케이션 생성하기

다음과 같이 app.py 파일을 생성하고, Flask 애플리케이션을 설정합니다:

from flask import Flask, request, redirect
from flask_jwt_extended import JWTManager, create_access_token
import requests

app = Flask(__name__)
app.config["SECRET_KEY"] = "YOUR-SECRET-KEY"
app.config["JWT_SECRET_KEY"] = "YOUR-JWT-SECRET-KEY"
jwt = JWTManager(app)

# 소셜 미디어 로그인 콜백 처리
@app.route("/callback")
def callback():
    code = request.args.get("code")
    
    # 소셜 미디어로부터 액세스 토큰 요청
    response = requests.post("SOCIAL-MEDIA-TOKEN-URL", data={
        "client_id": "YOUR-CLIENT-ID",
        "client_secret": "YOUR-CLIENT-SECRET",
        "code": code
    })
    
    access_token = response.json().get("access_token")
    
    # 액세스 토큰을 사용하여 사용자 정보 요청
    user_info = requests.get("SOCIAL-MEDIA-USER-INFO-URL", headers={
        "Authorization": f"Bearer {access_token}"
    }).json()
    
    # JWT 생성
    jwt_token = create_access_token(identity=user_info.get("id"))
    
    # 로그인 성공 후 리다이렉트
    return redirect(f"/success?jwt={jwt_token}")

3. 소셜 미디어 앱 등록 정보 설정하기

app.py 파일에서 다음 부분을 수정하여 소셜 미디어 앱 등록 정보를 설정합니다:

app.config["SECRET_KEY"] = "YOUR-SECRET-KEY"
app.config["JWT_SECRET_KEY"] = "YOUR-JWT-SECRET-KEY"

4. 소셜 미디어 로그인 버튼 추가하기

로그인을 진행할 웹 페이지에 소셜 미디어 로그인 버튼을 추가합니다:

<a href="SOCIAL-MEDIA-AUTHORIZE-URL" class="btn social-login-btn">소셜 미디어 로그인</a>

5. 로그인 성공 페이지 생성하기

로그인이 성공한 후, JWT 토큰을 받아오는 성공 페이지를 생성합니다. app.py 파일에 다음 코드를 추가합니다:

@app.route("/success")
def success():
    jwt_token = request.args.get("jwt")
    return f"로그인 성공!<br>JWT 토큰: {jwt_token}"

6. 애플리케이션 실행하기

터미널에서 다음 명령어를 실행하여 애플리케이션을 실행합니다:

$ python app.py

웹 브라우저에서 http://localhost:5000으로 접속하여 소셜 미디어 로그인 버튼을 클릭합니다. 정상적으로 로그인이 완료되면 로그인 성공 페이지가 나타나며, JWT 토큰이 표시됩니다.

결론

파이썬과 JWT를 이용한 소셜 로그인 기능을 구현하는 방법에 대해 알아보았습니다. 이를 통해 웹 애플리케이션에 소셜 로그인 기능을 손쉽게 추가할 수 있습니다. 보안을 위해 소셜 미디어 앱 등록 정보를 안전하게 관리하고, JWT를 적절히 활용하여 인증과 권한 부여를 구현하는 것이 중요합니다. #프로그래밍 #파이썬