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

相关文章
|
人工智能 API 开发者
FastAPI开发者福音!FastAPI-MCP:将FastAPI秒变MCP服务器的开源神器,无需配置自动转换!
FastAPI-MCP是一款能将FastAPI应用端点自动转换为符合模型上下文协议(MCP)的开源工具,支持零配置自动发现接口并保留完整文档和模式定义。
6460 113
FastAPI开发者福音!FastAPI-MCP:将FastAPI秒变MCP服务器的开源神器,无需配置自动转换!
|
安全 开发者 C++
Windows10安装modelscope后import这个模块报错:OSError: [WinError 1] 函数不正确。: 'D:\Anaconda\envs\MDS\lib\site-packages\modelscope\utils\ast_utils.py'
Windows10安装modelscope后import这个模块报错:OSError: [WinError 1] 函数不正确。: 'D:\Anaconda\envs\MDS\lib\site-packages\modelscope\utils\ast_utils.py'
1022 1
|
监控 NoSQL 数据可视化
Django+Celery 进阶:Flower可视化监控与排错
本文介绍了Celery命令行工具与图形监控工具的使用,涵盖查看Worker状态、任务信息及集成至Django项目的方法,同时提供Redis监控与常见问题排错方案。
1122 1
|
存储 云安全 运维
阿里云认证介绍 - 线上考试报名指南(ACA/ACP/ACE)
阿里云认证介绍 - 线上考试报名指南(ACA/ACP/ACE)
|
11月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
1759 1
|
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)
3138 0
Vue 跨域问题 的几种解决办法 (No ‘Access-Control-Allow-Origin‘ header is present on the requested resource)
|
JavaScript 容器
vue-element-admin 综合开发二:搭建首页架子、侧边栏、修改默认样式、menu和路由跳转页面初体验
这篇文章详细介绍了如何使用Vue和Element UI搭建一个后台管理系统,包括首页布局、侧边栏、样式调整、菜单和路由配置,以及解决开发中遇到的问题。
1913 1
vue-element-admin 综合开发二:搭建首页架子、侧边栏、修改默认样式、menu和路由跳转页面初体验
|
Linux iOS开发 MacOS
【MCP教程系列】阿里云百炼MCP全面配置指南:涵盖NPX、UVX、SSE及Streamable HTTP
本文详细介绍如何在阿里云百炼平台及Windows、Linux、MacOS系统中正确配置MCP服务的JSON文件。内容涵盖三种MCP服务配置:npx(基于Stdio)、uvx(Python工具运行)和SSE(服务器发送事件)。同时解析Streamable HTTP作为新一代传输方案的优势与应用,帮助用户掌握每个参数的具体用途及使用方法,解决配置过程中可能遇到的问题,提供完整示例和扩展信息以优化设置体验。
7949 11
|
缓存 安全 搜索推荐
CDN是什么?使用CDN有什么优势?
在维护和提供高质量网站服务时,CDN是不可或缺的工具之一,能够显著提升用户体验,降低网站运营成本,并增强网站的可靠性和安全性。尤其对于需要快速可靠内容交付的服务至关重要,如媒体公司、电子商务平台及在线教育提供商等。通过使用CDN,这些组织能够在全球范围内提供即时、优化的用户体验,这是在今天这个需要快速获取信息的时代极为重要的。
788 3