JWT 를 이용한 보안/인증 절차가 필요한 듯 한데,
이를 위해 자료 조사를 몇개 하는데 대충 아래로 정리가 된듯
맘에 걸리는 문제
1. 토큰을 강제로 만료시킬 수 없는 문제를 가지고 있다. 별도의 블랙리스트를 사용해 로그아웃 요청으로 전달된 토큰을 등록하여 해당 토큰을 통한 요청을 거부하도록 처리해 줘야 한다. 음...이게 먼가...
그냥 flask-jwt-extended 라이브러리를 활용해야 할 것 같다.
잘 정리된 자료는 아래와 같다. 잘 따라 가면 될 것 같다.
공식 문서 홈페이지는 아래와 같다.
https://flask-jwt-extended.readthedocs.io/en/stable/
여기에도 예제가 잘 되어 있다.
참고로, 이번에 바뀐 내용중에 많이 쓰는 함수들 관련 내용이 있어 내용 저장
@jwt_required is now @jwt_required()
@jwt_optional is now @jwt_required(optional=True)
@fresh_jwt_required is now @jwt_required(fresh=True)
@jwt_refresh_token_required is now @jwt_required(refresh=True)
fresh 도 그냥 옵션이다. fresh 플래그가 달린 놈들만 따로 접근하는 로직을 만들고 싶다면 활용할 옵션이 하나 더 있다는것
사용예는 아래 사이트 코드를 보면 쉽게 이해할 수 있다.
https://programtalk.com/vs2/python/13731/flask-jwt-extended/examples/token_freshness.py/
create_access_token(identity=username, fresh=True) API 내용에 보면, fresh 옵션에 대한 설명이 있다.
fresh –
If this token should be marked as fresh, and can thus access endpoints protected with @jwt_required(fresh=True). Defaults to False.
This value can also be a datetime.timedelta, which indicate how long this token will be considered fresh.
기본 값은 False, 신경안쓰고 내비두면 안쓰는 것.
굳이 Flag 로 기능을 나눠서 쓰고 싶다면 Ture 혹은 아래처럼 만료시간을 설정해 주면 된다.
create_access_token(identity, fresh=datetime.timedelta(minutes=15))
인증이 필요한 함수 선언 방법
보안이 필요한 Endpoint에는 아래와 같이 사전지시어 데코레이터(라고 부르네) 를 넣어두면 된다.
# Protect a route with jwt_required, which will kick out requests
# without a valid JWT present.
@app.route("/protected", methods=["GET"])
@jwt_required()
def protected():
# Access the identity of the current user with get_jwt_identity
current_user = get_jwt_identity()
return jsonify(logged_in_as=current_user), 200
이 라이브러리를 이용한 예제가 많이 있는데, 조사해 볼 만한 코드 일단 저장 하고
https://github.com/zwotzie/flask_jwt_extended/blob/master/app.py
한국사람이니 한글 자료를 더 찾아보게 되네.
(추가 필수 자료)
https://codeburst.io/jwt-authorization-in-flask-c63c1acf4eeb (완전 제일 정리가 잘 된 글 같다)
https://blog.teclado.com/jwt-authentication-and-token-refreshing-in-rest-apis/
https://dev.to/paurakhsharma/flask-rest-api-part-3-authentication-and-authorization-5935
백업 자료
꼭 읽어보자 -
BJ.
Logan Kirschner 님의 사진, 출처: Pexels
'IT > 파이썬' 카테고리의 다른 글
윈도우 flask gunicorn 에러 발생 시 대안 - No module named 'fcntl' (0) | 2021.07.27 |
---|---|
Flask REST API 구현 중 파일 업로드는? (0) | 2021.07.01 |
작업중 - 서버 구조 구성 Flask API + ReactJS Frontend + GUnicorn (0) | 2021.06.30 |
JWT access token, refresh token 용도 (0) | 2021.06.30 |
파이썬 - 정규표현식 (0) | 2021.06.29 |