簡體   English   中英

flask-jwt-extended:裝飾器@jwt.token_in_blacklist_loader 總是撤銷令牌

[英]flask-jwt-extended: decorator @jwt.token_in_blacklist_loader always revoked token

在我的 app.py 中,我初始化了 flask-jwt-extended 如下:

# Setup the Flask-JWT-Extended extension
app.config['RESTPLUS_MASK_SWAGGER'] = False # remove default X-Fields field in swagger
app.config['JWT_SECRET_KEY'] = 'super-secret'  # Change this!
app.config['JWT_BLACKLIST_ENABLED'] = True
app.config['JWT_BLACKLIST_TOKEN_CHECKS'] = ['access', 'refresh']
jwt = JWTManager(app)

然后我使用代碼段在登錄中創建令牌:

            expires = datetime.timedelta(minutes=10)
            access_token = create_access_token(identity=payload['email'], fresh=True, expires_delta=expires)
            refresh_token = create_refresh_token(identity=payload['email'])

奇怪的是,如果我將裝飾器 @jwt.token_in_blacklist_loader 添加到某個端點,我總是收到“令牌已被撤銷”錯誤消息。

@jwt.token_in_blacklist_loader
@api.route('/')
class UserList(Resource):
    @jwt_required
    @api.doc('list_users')
    @api.marshal_list_with(user)
    def get(self):
        '''Get all users'''
        users = UserApi.query.all()
        return users

據我所知,這個裝飾器是檢查令牌是否被列入黑名單,我只是從登錄創建一個新令牌,創建新令牌並檢查令牌是否被列入黑名單的最佳實踐是什么?

flask-jwt-extended的文檔flask-jwt-extended

此裝飾器設置回調函數,當訪問受保護的端點時將調用該回調函數,並將檢查 JWT 是否已被撤銷。 默認情況下,不使用此回調。

提示:回調必須是一個函數,它接受一個參數,即解碼后的 JWT(python 字典),如果令牌已被列入黑名單(或被視為已撤銷),則返回True否則返回False

token_in_blacklist_loader裝飾器用於在訪問受保護端點時設置回調函數。 您應該在檢查您的令牌是否被列入黑名單的函數上使用此裝飾器。 使用內存保存列入黑名單的令牌的簡單示例:

blacklist = set()
@jwt.token_in_blacklist_loader
def check_if_token_in_blacklist(decrypted_token):
    jti = decrypted_token['jti']
    return jti in blacklist

有關更多信息,請查看此處的示例: https : //flask-jwt-extended.readthedocs.io/en/stable/blacklist_and_token_revoking/

記得將新生成的access_token(來自refresh_token)添加到黑名單數據庫中嗎? Blacklist db 中不存在的所有令牌都被假定為被撤銷......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM