【全是精华】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 续签的实现。

相关文章
uniapp发送formdata表单请求(全网最简单方法)
因为uniapp不支持直接传输formdata,只提供了uploadFile方法上传文件,但是利用该方法就可以传输formdata了。
3827 1
|
人工智能 API 开发者
FastAPI开发者福音!FastAPI-MCP:将FastAPI秒变MCP服务器的开源神器,无需配置自动转换!
FastAPI-MCP是一款能将FastAPI应用端点自动转换为符合模型上下文协议(MCP)的开源工具,支持零配置自动发现接口并保留完整文档和模式定义。
6031 113
FastAPI开发者福音!FastAPI-MCP:将FastAPI秒变MCP服务器的开源神器,无需配置自动转换!
|
11月前
|
监控 NoSQL 数据可视化
Django+Celery 进阶:Flower可视化监控与排错
本文介绍了Celery命令行工具与图形监控工具的使用,涵盖查看Worker状态、任务信息及集成至Django项目的方法,同时提供Redis监控与常见问题排错方案。
915 1
|
人工智能 网络协议 Linux
MCP 协议: Streamable HTTP 是最佳选择
随着AI应用变得越来越复杂并被广泛部署,原有的通信机制面临着一系列挑战。近期MCP仓库的PR #206引入了一个全新的Streamable HTTP传输层替代原有的HTTP+SSE传输层。本文将详细分析该协议的技术细节和实际优势。
7571 102
|
8月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
1375 1
|
数据可视化 关系型数据库 MySQL
【MCP教程系列】上阿里云百炼,5分钟解锁数据分析与可视化能力
本文介绍如何在阿里云百炼平台通过自定义MCP部署MySQL服务,实现5分钟解锁数据分析与可视化能力。以碳排放数据库为例,详细讲解从创建公网访问的MySQL数据库、配置MCP服务到引入智能体进行数据分析的全流程。借助QuickChart等工具,可将复杂数据转化为直观图表,赋能业务决策。适合希望快速上手数据库分析的用户参考使用。
2539 0
|
JavaScript Java 应用服务中间件
Vue 跨域问题 的几种解决办法 (No ‘Access-Control-Allow-Origin‘ header is present on the requested resource)
Vue 跨域问题 的几种解决办法 (No ‘Access-Control-Allow-Origin‘ header is present on the requested resource)
3041 0
Vue 跨域问题 的几种解决办法 (No ‘Access-Control-Allow-Origin‘ header is present on the requested resource)

热门文章

最新文章