Flask보기를 통해 API를 구축했으며 사용자는 /api/v1/....
에서 일부 끝점을 사용하여 액세스합니다. 요청하는 사용자를 인증하고 싶습니다. 내 API로 인증을 시행하는 방법은 무엇입니까? 사용자 모델을 구축하지 않고 Google 또는 Github 기반 인증을 사용하는 방법이 있습니까?Flask 기반 API 인증?
-2
A
답변
1
나는 flask 요청을 가로 채고 헤더가있는 세션과 세션 요청을 가로 채고 있습니다. 웹의 요청은 Flask의 세션을 사용하며 모바일 앱의 요청은 헤더를 보냅니다.
이 메소드는 주어진 요청에 대해 사용자를 반환합니다. API 토큰은 위험한 것으로 서명 (변조 방지)되어 있으며, 이는 Flask의 쿠키를 강화합니다.
from itsdangerous import URLSafeSerializer, BadData
serializer = URLSafeSerializer(CONFIG['SECRET_KEY'])
def load_user_from_request(request):
token = request.headers.get('API-TOKEN')
if token:
try:
user_id = serializer.loads(token)["id"]
user = User.query.filter(User.active == True, User.id == int(user_id)).first()
if user:
return user
except BadData as e:
pass
return None
def load_user(id):
user = User.query.filter(User.active == True, User.id == int(id)).first()
if not user:
return None
return user
login_manager.user_loader(load_user)
login_manager.request_loader(load_user_from_request)
이 엔드 포인트는 인증 요청에 소요되는 사용자 이름과 암호 문제 토큰을 확인합니다. 그 위험한 시리얼 라이저는 당신의 객체의 변조 방지 버전을 만든다. 클라이언트는 헤더와 동일하게 제출합니다. 앱의 비밀 키가 안전하다면 서버는 서명 된 객체가 서버에서 발행되었음을 확인할 수 있습니다.
@blueprint.route('/api_auth', methods=["post"])
def api_auth():
...check username and password
return response({
'API-TOKEN': serializer.dumps({'id': user.id})
})
나는 Flask-OAuth 또는 Flask-OAtuthlib가 도움이 될 것이라고 생각합니다. – stamaimer