首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将刷新令牌与fastapi一起使用?

如何将刷新令牌与fastapi一起使用?
EN

Stack Overflow用户
提问于 2020-06-17 00:54:02
回答 2查看 5.7K关注 0票数 8

我想找一个在fastapi中使用refresh token的例子。fastapi docs提供了如何创建具有有限生存期的承载令牌的示例,但没有提供如何刷新令牌的示例。

flask有flask-jwt-extended,但没有找到与fastapi类似的东西。

如有任何建议,我们将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2020-12-19 08:43:31

你可能想看看fastapi-jwt-auth。它的灵感来自flask-jwt-extended。有一篇很好的文档介绍了如何在良好的examples中使用刷新令牌。

首先,您需要安装包:pip install fastapi-jwt-auth。并配置密钥。然后,在登录时创建刷新令牌和访问令牌,并将其返回给用户。

代码语言:javascript
复制
from fastapi import FastAPI, Depends, HTTPException
from fastapi_jwt_auth import AuthJWT
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel):
    email: str
    password: str

class Settings(BaseModel):
    authjwt_secret_key: str = "secret"

@AuthJWT.load_config
def get_config():
    return Settings()

@app.post('/login')
def login(user: User, Authorize: AuthJWT = Depends()):
    if user.email != "test@test.com" or user.password != "test":
        raise HTTPException(status_code=401,detail="Incorrect email or password")
    access_token = Authorize.create_access_token(subject=user.email)
    refresh_token = Authorize.create_refresh_token(subject=user.email)
    return {"access_token": access_token, "refresh_token": refresh_token}

在下一步中,您应该创建一个端点来刷新访问令牌。

代码语言:javascript
复制
@app.post('/refresh')
def refresh(Authorize: AuthJWT = Depends()):
    Authorize.jwt_refresh_token_required()
    current_user = Authorize.get_jwt_subject()
    new_access_token = Authorize.create_access_token(subject=current_user)
    return {"access_token": new_access_token}

# Example protected Endpoint
@app.get('/hello')
def refresh(Authorize: AuthJWT = Depends()):
    Authorize.jwt_required()
    return {"hello": "world"}

请注意,这只是一个小示例,从安全的角度来看,您应该在刷新时交换刷新令牌,并将旧令牌列入黑名单。因此,该库提供了装饰器@AuthJWT.token_in_denylist_loader。您可以使用内存中的数据库实现黑名单,该数据库将失效的令牌保留到到期日期。也是在生产中选择一个真正的秘密。

票数 5
EN

Stack Overflow用户

发布于 2021-04-02 21:09:02

我自己生成令牌,根据本次请求和上次请求之间的时间间隔来决定是否刷新令牌,如果超过预定的替换令牌的时间,同时通知前端保存新的令牌

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62413698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档