Authlib는 Python에서 사용할 수 있는 강력한 인증 및 인가 라이브러리입니다. 이 라이브러리는 다양한 소셜 로그인 서비스와 통합할 수 있는 기능을 제공하므로, 애플리케이션에 소셜 로그인을 사용하는 사용자를 식별하는 것은 간단합니다.
우선, Authlib를 설치해야 합니다. pip를 사용하여 다음 명령을 실행하여 Authlib를 설치할 수 있습니다:
pip install authlib
이제, 소셜 로그인을 지원하는 서비스에서 등록한 클라이언트 ID와 클라이언트 시크릿을 사용하여 Authlib의 OAuth
클라이언트 인스턴스를 생성합니다. 각 소셜 로그인 서비스마다 상이한 설정이 필요할 수 있으므로, Authlib의 문서를 참고하여 적절한 설정을 해야 합니다.
from authlib.integrations.flask_client import OAuth
oauth = OAuth()
oauth.register(
'google',
client_id='YOUR_GOOGLE_CLIENT_ID',
client_secret='YOUR_GOOGLE_CLIENT_SECRET',
authorize_url='https://accounts.google.com/o/oauth2/v2/auth',
token_url='https://accounts.google.com/o/oauth2/token',
userinfo_url='https://www.googleapis.com/oauth2/v3/userinfo',
client_kwargs={'scope': 'openid profile email'}
)
위 코드에서는 Google 소셜 로그인을 사용하는 예제입니다. 다른 소셜 로그인 서비스를 사용하려면 해당 서비스의 설정을 고려하여 oauth.register
를 호출해야 합니다.
이제, 소셜 로그인 버튼을 클릭하여 사용자를 인증하고 토큰을 받아올 수 있습니다. 아래 예제는 Flask 프레임워크를 사용하여 소셜 로그인을 처리하는 예제입니다.
from flask import Flask, redirect, url_for
from flask_login import login_required, login_user, LoginManager, UserMixin, current_user
from authlib.integrations.flask_client import OAuth
app = Flask(__name__)
app.secret_key = 'YOUR_SECRET_KEY'
login_manager = LoginManager(app)
login_manager.login_view = 'login'
@login_manager.user_loader
def load_user(user_id):
# 유저 로딩 코드 작성
oauth = OAuth(app)
oauth.register(
'google',
client_id='YOUR_GOOGLE_CLIENT_ID',
client_secret='YOUR_GOOGLE_CLIENT_SECRET',
authorize_url='https://accounts.google.com/o/oauth2/v2/auth',
token_url='https://accounts.google.com/o/oauth2/token',
userinfo_url='https://www.googleapis.com/oauth2/v3/userinfo',
client_kwargs={'scope': 'openid profile email'}
)
@app.route('/login')
def login():
redirect_uri = url_for('authorize', _external=True)
return oauth.google.authorize_redirect(redirect_uri)
@app.route('/authorize')
def authorize():
token = oauth.google.authorize_access_token()
user_info = oauth.google.parse_id_token(token)
# 사용자 정보로 로그인 처리 (예: DB에 저장된 유저 정보 확인)
# 사용자 정보를 이용하여 사용자를 인증 및 식별하는 코드 작성
login_user(user) # 로그인 처리
return redirect(url_for('protected'))
@app.route('/protected')
@login_required
def protected():
return f'Hello, {current_user.name}!'
위 코드에서 'YOUR_SECRET_KEY'
, 'YOUR_GOOGLE_CLIENT_ID'
, 'YOUR_GOOGLE_CLIENT_SECRET'
등은 개발자가 자신의 환경 및 Google API에 맞게 설정해야 합니다.
위 코드는 Flask-Login과 함께 사용된 예제이며, login_user
함수를 사용하여 사용자 로그인 처리를 하고, @login_required
데코레이터를 사용하여 해당 페이지에 로그인한 사용자만 접근할 수 있도록 하고 있습니다.
Authlib를 사용하여 소셜 로그인을 구현하는 방법에 대한 자세한 내용은 Authlib 공식 문서를 참고하시기 바랍니다.