본문 바로가기
IT/파이썬

Flask JWT 로그인 기능을 위한 자료 조사 - flask-jwt-extended

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://blog.oseonsik.com/2020/11/20/flask-jwt-extended%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EA%B5%AC%ED%98%84/

 

flask-jwt-extended를 활용한 로그인 구현 – O's Of The Day

 

blog.oseonsik.com

 

(추가 필수 자료)

https://codeburst.io/jwt-authorization-in-flask-c63c1acf4eeb (완전 제일 정리가 잘 된 글 같다)

 

JWT authorization in Flask

JSON Web Tokens (JWT) are very popular nowadays. Modern web-development is aimed at building Single Page Applications (SPA) using latest…

codeburst.io

 

 

https://blog.teclado.com/jwt-authentication-and-token-refreshing-in-rest-apis/

 

Token Authentication and Refreshing using Flask-JWT-Extended

JWTs are great for processing authentication in a REST API. How can you stop requiring users provide their username and password every time the token expires? Learn about token-based authentication and token refresh!

blog.teclado.com

https://dev.to/paurakhsharma/flask-rest-api-part-3-authentication-and-authorization-5935

 

Flask Rest API -Part:3- Authentication and Authorization

Howdy! In the previous Part of the series, we learned how to use Blueprint and Flask-Restful to struc...

dev.to

백업 자료 

꼭 읽어보자 -

https://velog.io/@yaytomato/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%90%EC%84%9C-%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0

 

🍪 프론트에서 안전하게 로그인 처리하기 (ft. React)

localStorage냐 쿠키냐 그것이 문제로다

velog.io

 

 

 

BJ.

비밀키가 필요없는 안전한 세상은 없나?

Logan Kirschner 님의 사진, 출처: Pexels