[파이썬] Flask에서의 서드파티 인증 (Google, Facebook 등)

웹 애플리케이션에서 로그인 인증을 구현할 때 일반적으로 사용되는 방법은 서드파티 인증입니다. 서드파티 인증은 사용자가 애플리케이션에 직접 로그인하는 대신, 제3자 서비스 (예: Google, Facebook)의 인증 시스템을 사용하여 인증하는 방식입니다. Flask 프레임워크에서는 서드파티 인증을 구현하기 위해 여러 확장(extension)을 제공하고 있습니다.

이번 글에서는 Flask-Login-Extension을 사용하여 Flask 애플리케이션에서 Google 및 Facebook을 통한 서드파티 인증을 구현하는 방법을 알아보겠습니다.

Flask-Login-Extension 소개

Flask-Login-Extension은 Flask 애플리케이션에서 사용자 인증과 세션 관리를 쉽게 처리할 수 있도록 도와주는 확장입니다. 이 확장은 Flask-Login 패키지를 기반으로 하며, 로그인, 로그아웃, 세션 관리 등과 같은 기본적인 사용자 인증 기능을 제공합니다.

Google 로그인 인증 구현

구글 로그인 인증을 구현하기 위해서는 다음과 같은 단계를 따르면 됩니다.

  1. Google API Credentials 생성하기: 구글 콘솔에서 애플리케이션을 등록하고 API credentials를 생성합니다. 생성된 클라이언트 ID 및 클라이언트 시크릿은 Flask-Login-Extension에서 사용됩니다.
  2. Flask 애플리케이션에 확장(extension) 추가하기: flask_login을 설치한 뒤, Flask 애플리케이션에서 LoginManager를 초기화하고 Google 인증에 필요한 설정값을 지정합니다.
  3. 로그인 뷰 및 콜백 뷰 구현하기: 로그인 페이지를 구현하고, Google 인증 후에 호출되는 콜백 뷰를 구현합니다. @login_required 데코레이터를 사용하여 로그인 인증이 필요한 페이지에 액세스할 수 있도록 합니다.
from flask import Flask, redirect, url_for
from flask_login import LoginManager, login_required, login_user

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

login_manager = LoginManager()
login_manager.init_app(app)

@login_manager.user_loader
def load_user(user_id):
    # 사용자 정보를 로드하는 로직
    pass

@app.route('/login/google')
def login_google():
    # Google 로그인 페이지로 리디렉션
    pass

@app.route('/login/google/callback')
def login_google_callback():
    # Google 인증 후 호출되는 콜백 뷰
    pass

@app.route('/profile')
@login_required
def profile():
    # 로그인이 필요한 페이지
    pass

if __name__ == '__main__':
    app.run()

Facebook 로그인 인증 구현

페이스북 로그인 인증을 구현하기 위해서는 다음과 같은 단계를 따르면 됩니다.

  1. Facebook Developer App 생성하기: 페이스북 개발자 콘솔에서 애플리케이션을 등록하고 API credentials를 생성합니다. 생성된 앱 ID 및 앱 시크릿은 Flask-Login-Extension에서 사용됩니다.
  2. Flask 애플리케이션에 확장(extension) 추가하기: flask_login을 설치한 뒤, Flask 애플리케이션에서 LoginManager를 초기화하고 Facebook 인증에 필요한 설정값을 지정합니다.
  3. 로그인 뷰 및 콜백 뷰 구현하기: 로그인 페이지를 구현하고, Facebook 인증 후에 호출되는 콜백 뷰를 구현합니다. @login_required 데코레이터를 사용하여 로그인 인증이 필요한 페이지에 액세스할 수 있도록 합니다.
from flask import Flask, redirect, url_for
from flask_login import LoginManager, login_required, login_user

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

login_manager = LoginManager()
login_manager.init_app(app)

@login_manager.user_loader
def load_user(user_id):
    # 사용자 정보를 로드하는 로직
    pass

@app.route('/login/facebook')
def login_facebook():
    # Facebook 로그인 페이지로 리디렉션
    pass

@app.route('/login/facebook/callback')
def login_facebook_callback():
    # Facebook 인증 후 호출되는 콜백 뷰
    pass

@app.route('/profile')
@login_required
def profile():
    # 로그인이 필요한 페이지
    pass

if __name__ == '__main__':
    app.run()

위의 예제 코드에서는 Google 및 Facebook 로그인을 처리하기 위해 약간의 코드를 추가해야합니다. 인증된 사용자의 정보를 가져오고 세션을 관리하기 위해서 사용자 모델의 로드와 인증 기능을 구현해야 합니다. 실제 애플리케이션에서는 실제 사용자 정보와 세션 관리 등을 구현해야 하지만, 이를 위한 기본적인 틀을 위의 코드에서 확인할 수 있습니다.

이러한 방식으로 Flask-Login-Extension을 사용하여 Flask 애플리케이션에서 Google, Facebook을 통한 서드파티 인증을 구현할 수 있습니다. 이를 통해 사용자들은 자신이 구글이나 페이스북 계정으로 로그인하여 애플리케이션에 액세스할 수 있습니다.