[파이썬] Flask에서의 SSO (Single Sign-On)
개요
SSO (Single Sign-On)는 사용자가 단일 인증 정보로 여러 시스템에 접속할 수 있는 인증 메커니즘입니다. Flask는 Python으로 작성된 웹 프레임워크로서 SSO를 구현하기에 적합한 환경을 제공합니다. 이 블로그 포스트에서는 Flask 애플리케이션에서 SSO 구현하는 방법을 알아보겠습니다.
세션 기반 SSO
세션 기반 SSO는 사용자가 한 번 로그인하면 여러 시스템에서 회원 인증 정보를 공유하는 방식입니다. Flask에서는 세션을 쉽게 관리할 수 있는 Flask-Session 확장을 사용할 수 있습니다.
Flask-Session 설치
pip install Flask-Session
Flask-Session 구성
app.py 파일에서 app
객체 생성 및 Flask-Session 확장 초기화 코드를 추가합니다.
from flask import Flask, session
from flask_session import Session
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
app.config['SESSION_TYPE'] = 'filesystem'
Session(app)
로그인 기능 구현
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
# 사용자 인증 로직
# 인증이 성공하면 세션에 사용자 정보 저장
session['username'] = username
return redirect('/dashboard')
else:
return render_template('login.html')
다른 시스템에서 인증 확인
@app.route('/dashboard')
def dashboard():
if 'username' in session:
# 인증이 확인되었으므로 대시보드 페이지 렌더링
username = session['username']
return render_template('dashboard.html', username=username)
else:
# 인증이 실패한 경우 로그인 페이지로 이동
return redirect('/login')
JWT (JSON Web Token) 기반 SSO
JWT (JSON Web Token)는 웹 애플리케이션 간 인증 정보를 안전하게 전송하기 위한 표준 방식입니다. Flask에서는 파이썬 JWT 라이브러리를 사용하여 JWT 기반 SSO를 구현할 수 있습니다.
파이썬 JWT 설치
pip install pyjwt
JWT 생성 및 유효성 검사
import jwt
# JWT 생성
def generate_token(username):
payload = {'username': username}
token = jwt.encode(payload, 'your_secret_key', algorithm='HS256')
return token
# JWT 유효성 검사
def verify_token(token):
try:
payload = jwt.decode(token, 'your_secret_key', algorithms=['HS256'])
return payload['username']
except jwt.ExpiredSignatureError:
# 토큰 만료
return None
except jwt.InvalidTokenError:
# 잘못된 토큰
return None
로그인 기능 구현
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form.get('username')
password = request.form.get('password')
# 사용자 인증 로직
if authentication_success:
# 인증이 성공하면 JWT 생성
token = generate_token(username)
response = make_response(redirect('/dashboard'))
# JWT를 쿠키에 저장
response.set_cookie('jwt_token', token)
return response
else:
# 인증 실패시 로그인 페이지로 이동
return render_template('login.html')
else:
return render_template('login.html')
다른 시스템에서 인증 확인
@app.route('/dashboard')
def dashboard():
# JWT 토큰 유효성 검사
token = request.cookies.get('jwt_token')
username = verify_token(token)
if username:
# 인증이 확인되었으므로 대시보드 페이지 렌더링
return render_template('dashboard.html', username=username)
else:
# 인증이 실패한 경우 로그인 페이지로 이동
return redirect('/login')
위에서는 Flask를 사용하여 세션 기반 SSO와 JWT 기반 SSO를 구현하는 방법에 대해 알아보았습니다. Flask는 다양한 확장 기능과 사용자 편의성을 제공하므로 SSO 구현에 있어 유용한 도구입니다.