Rest API

API서버 - 로그아웃 기능 구현하기 (jwt 토큰 파괴)

왕현성 2023. 1. 5. 15:56
728x90

1. flask_jwt_extended 라이브러리를 이용하여 로그아웃 기능 구현하기

  • 토큰을 이용하여 로그인 상태인 유저의 토큰을 파괴하여 로그아웃 상태로 변경
  • 즉, 토큰이 유효할 때만 로그인 상태의 권한을 누릴 수 있음
    • 토큰 (token)
      • 유저의 식별 정보를 암호화 한 것
      • 로그인을 통해 식별 정보를 토큰화
      • 토큰을 이용하여 신원을 확인
      • 로그아웃을 통해 토큰을 폐기
    • 토큰 생성
      • create_access_token( var ) : var의 데이터를 토큰화
    • 토큰 식별
      • jwt_required() : 토큰이 존재해야 다음의 코드를 수행
    • 토큰 파괴
      • @jwt.token_in_blocklist_loader : 토큰이 블록리스트에 존재하면 다음의 코드 수행
        • blacklist/blocklist : 이전에는 blacklist를 사용하였으나 이름이 변경되어 blocklist를 사용
        • payload : 토큰의 정보를 담고 있음
        • jti : jwt 토큰의 고유 ID
      • jwt_blocklist : 토큰의 파괴 기능을 담당

 

로그아웃 코드 작성 - user.py

### 로그아웃 ###
# 로그아웃된 토큰을 저장할 set 만든다.

jwt_blacklist = set()

class UserLogoutResource(Resource):
    @jwt_required()
    def post(self) :
        
        jti=get_jwt()['jti']
        print(jti)
        jwt_blacklist.add(jti)

        return {'result':'success'},200

로그아웃 코드 작성 - app.py

# 로그아웃된 토큰으로 요청하는 경우 처리하는 코드작성.
@jwt.token_in_blocklist_loader
def check_if_token_is_revoked(jwt_header,jwt_payload) :
    jti = jwt_payload['jti']
    return jti in jwt_blacklist

포스트맨을 이용한 테스트 - 로그인 API

- 로그인 이후 header에 토큰을 작성하고 내 레시피 가져오는 것에 성공한 모습

 

로그아웃 API를 이용해 로그아웃을 한 후에

같은 토큰으로 레시피 리스트 가져오기에 실패한 모습  => 로그아웃이 정상적으로 된 것을 확인.