[python] Authlib를 사용하여 애플리케이션에 액세스 토큰 쿠키를 사용하여 사용자 인증하는 방법은?

Authlib는 Python에서 사용되는 강력한 인증 및 인가 라이브러리입니다. 이 라이브러리를 사용하면 웹 애플리케이션에서 액세스 토큰 쿠키를 사용하여 사용자 인증을 구현할 수 있습니다.

선행 작업

Authlib를 사용하기 전에 pip을 사용하여 Authlib를 설치해야 합니다.

pip install authlib

또한, 이 예제에서는 Flask 프레임워크를 사용할 것이므로 Flask도 설치해야 합니다.

pip install flask

애플리케이션 설정

다음으로, Flask 애플리케이션을 만들고 Authlib를 사용하기 위해 필요한 구성을 추가해야 합니다. 이 예제에서는 매우 간단한 Flask 애플리케이션을 사용하겠습니다.

from flask import Flask, redirect, url_for
from authlib.integrations.flask_client import OAuth

app = Flask(__name__)
app.secret_key = 'your_secret_key'
oauth = OAuth(app)

위의 코드에서는 Flask 클래스를 사용하여 애플리케이션을 생성하고, OAuth 클래스를 사용하여 Authlib를 구성합니다. secret_key는 세션 및 쿠키에 사용될 암호화 키입니다.

OAuth 공급자 등록

Authlib는 OAuth 공급자와의 통합을 위한 여러가지 클래스를 제공합니다. 예를 들어, Google, Facebook, GitHub 등 다양한 OAuth 공급자를 지원합니다. 이 예제에서는 GitHub을 사용하도록 설정하겠습니다.

github = oauth.register(
    name='github',
    client_id='your_client_id',
    client_secret='your_client_secret',
    access_token_url='https://github.com/login/oauth/access_token',
    authorize_url='https://github.com/login/oauth/authorize',
    api_base_url='https://api.github.com/'
)

위의 코드에서는 register 메서드를 사용하여 GitHub OAuth 공급자를 등록합니다. name 매개변수는 공급자의 이름을 나타내며, client_idclient_secret은 다음과 같이 GitHub에서 애플리케이션을 등록할 때 얻을 수 있는 값을 사용해야 합니다. access_token_url, authorize_url, api_base_url은 각각 액세스 토큰을 발급받기 위한 URL, 사용자 인증을 위한 URL, API 엔드포인트를 지정합니다.

로그인 요청 및 콜백 처리

이제 로그인 요청과 콜백 처리를 구현해야 합니다. 로그인 요청은 애플리케이션에서 로그인 버튼을 제공하여 사용자가 클릭하도록 유도합니다.

@app.route('/login')
def login():
    redirect_uri = url_for('authorize', _external=True)
    return github.authorize_redirect(redirect_uri)

@app.route('/authorize')
def authorize():
    github.authorize_access_token()
    user = github.get('user').json()
    # 사용자 정보로 로그인 처리
    return f"Hello, {user['login']}!"

위의 코드에서는 /login 경로에서 로그인 요청을 처리하고, /authorize 경로에서 콜백을 처리합니다. 로그인 요청에서는 authorize_redirect 메서드를 사용하여 GitHub 인증 페이지로 리디렉션합니다. 콜백에서는 authorize_access_token 메서드를 사용하여 액세스 토큰을 발급받은 후, get 메서드를 사용하여 사용자 정보를 가져옵니다.

토큰 저장

마지막으로, 토큰을 저장하는 방법을 구현해야 합니다. 이 예제에서는 쿠키를 사용하여 토큰을 저장하겠습니다.

from flask import make_response

@app.route('/')
def index():
    token = github.token
    if token:
        response = make_response(f"Your access token: {token}")
        response.set_cookie('access_token', token)
        return response
    else:
        return "Not logged in"

위의 코드에서는 액세스 토큰이 있으면 쿠키에 저장하고, 액세스 토큰이 없으면 “Not logged in”을 반환합니다.

이제 Authlib를 사용하여 액세스 토큰 쿠키를 사용하여 사용자 인증하는 방법을 구현했습니다. 이 예제에서는 간단한 Flask 애플리케이션을 사용하여 GitHub OAuth 공급자를 통해 사용자 인증을 처리하는 방법을 보여주었습니다. Authlib는 많은 다른 기능과 확장성을 제공하므로 개발자들은 필요에 따라 활용할 수 있습니다.

참고 자료