【全是精华】Token的获取和使用-FastApi版

简介: 【全是精华】Token的获取和使用-FastApi版

前言


通常,我们的接口都是需要认证后才能可以访问的,前面我们介绍了 token 的生成和校验,那在 FastApi 中怎么设计需要认证的接口呢?


定义令牌对象


oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token/")
复制代码


以上/token/为获取 tokenURI,具体内容如下:


class Token(BaseModel):
    access_token: str
    token_type: str
@app.post('/token/',response_model=Token)
async def get_token(response:Response,form_data: OAuth2PasswordRequestForm = Depends()):
    if form_data.username=='phyger' and form_data.password=='phyger666':
        response.headers['access_token']=create_token()
        return {"access_token":create_token(),"token_type":"bearer"}
复制代码


/token/可以返回指定格式的令牌信息。


定义需要认证的接口


@app.get('/format/{name}')
async def fmt(name,token=Depends(oauth2_scheme)):
    print(token)
    print(type(name))
    new_name = name.title()
    return {'result':new_name}
复制代码


直接访问此接口


网络异常,图片无法展示
|


如上,直接访问会提示未认证,这样,我们已经达到了目的,但是怎么样才能实现准确无误的认证呢?


带上 bearer token 试试


网络异常,图片无法展示
|


你会发现,我们携带的错误的 token 也能成功,这是为什么呢?


因为在接口中,我们通过 oauth2_scheme 拿到了 token,这个 token 是标准的 bearer 格式,但是我们没有对其进行校验,所以只要格式正确,接口都能正常返回。


使用错误的 bearer 格式


网络异常,图片无法展示
|


如上,使用错误的 bearer 格式的 token,就无法访问接口了。


获取和校验 token


思路:通过上面的代码,我们将获取 token,校验 token 封装成一个静态方法,在需要认证的接口中对这个方法进行依赖即可。


封装的接口


from utm import judge_token
def login_required(token=Depends(oauth2_scheme)):
    credentials_exception = HTTPException(
        status_code=status.HTTP_401_UNAUTHORIZED,
        detail="认证失败!",
        headers={"WWW-Authenticate": "Bearer"},
    )
    if judge_token(token=token):
        return True
    else:
        raise credentials_exception
复制代码


需要认证的接口


@app.get('/format/{name}')
async def fmt(name,token=Depends(login_required)):
    print(token)
    print(type(name))
    new_name = name.title()
    return {'result':new_name}
复制代码


直接访问/format/{name}接口


网络异常,图片无法展示
|


提示:未认证!


携带过期的 token 访问


网络异常,图片无法展示
|


提示:认证失败!


使用错误 bearer 格式


网络异常,图片无法展示
|


提示:未认证!


使用正确有效的 token


网络异常,图片无法展示
|


如上,成功!


上面,我们将 token 错误,token 过期都统一定义为认证失败!后续可以进行细化。还需要考虑 token 续签的实现。

相关文章
|
人工智能 编解码
国内原汁原味的免费sd训练工具--哩布哩布AI
国内原汁原味的免费sd训练工具--哩布哩布AI
2405 0
|
存储 算法 NoSQL
还分不清 Cookie、Session、Token、JWT?看这一篇就够了
Cookie、Session、Token 和 JWT(JSON Web Token)都是用于在网络应用中进行身份验证和状态管理的机制。虽然它们有一些相似之处,但在实际应用中有着不同的作用和特点,接下来就让我们一起看看吧,本文转载至http://juejin.im/post/5e055d9ef265da33997a42cc
48636 13
|
小程序 前端开发 JavaScript
微信小程序(二十一)小程序登录获取openid和unionid
在微信小程序中,因为各种各样的原因我们会需要获取到用户的openid或者unionid下面就简单来讲一下在小程序中如何获取openid和unionid。 步骤一:微信登录获取登录凭证
2921 0
|
存储 SQL JSON
信创迁移适配实战-MySQL到达梦数据库DM8的数据迁移
信创迁移适配实战-MySQL到达梦数据库DM8的数据迁移
6948 0
信创迁移适配实战-MySQL到达梦数据库DM8的数据迁移
|
8月前
|
人工智能 网络协议 Linux
MCP 协议: Streamable HTTP 是最佳选择
随着AI应用变得越来越复杂并被广泛部署,原有的通信机制面临着一系列挑战。近期MCP仓库的PR #206引入了一个全新的Streamable HTTP传输层替代原有的HTTP+SSE传输层。本文将详细分析该协议的技术细节和实际优势。
4429 100
|
数据可视化 关系型数据库 MySQL
【MCP教程系列】上阿里云百炼,5分钟解锁数据分析与可视化能力
本文介绍如何在阿里云百炼平台通过自定义MCP部署MySQL服务,实现5分钟解锁数据分析与可视化能力。以碳排放数据库为例,详细讲解从创建公网访问的MySQL数据库、配置MCP服务到引入智能体进行数据分析的全流程。借助QuickChart等工具,可将复杂数据转化为直观图表,赋能业务决策。适合希望快速上手数据库分析的用户参考使用。
1592 0
|
机器学习/深度学习 算法 大数据
大数据中缺失值处理
【10月更文挑战第20天】
971 4
|
12月前
|
存储 关系型数据库 数据库
极简开发,极速上线:构建端到端大模型应用
本文将以一个经典的 RAG(检索增强生成)知识问答系统为例,详细介绍从智能体设计到最终应用部署的全流程。
1748 82
|
8月前
|
存储 缓存 文件存储
uv安装python及其依赖的加速方法
国内在使用uv的时候,可能会涉及到装python的速度太慢的问题,为了解决这个问题,可以使用`UV_PYTHON_INSTALL_MIRROR`这个环境变量。除此以外,对于多人协作场景,`UV_CACHE_DIR`也是一个有用的环境变量。本文会介绍这两个变量。
5603 10
|
SQL 关系型数据库 MySQL
Pandas获取SQL数据库read_sql()函数及参数一文详解+实例代码
Pandas获取SQL数据库read_sql()函数及参数一文详解+实例代码
8184 0
Pandas获取SQL数据库read_sql()函数及参数一文详解+实例代码

热门文章

最新文章