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

相关文章
|
3月前
|
缓存 安全 JavaScript
「offer来了」浏览器原理被问懵?5大知识板块巩固你的http知识体系(3.6w字)
该文章系统地整理了前端面试中有关浏览器原理的核心知识点,涵盖HTTP协议、浏览器缓存机制、请求过程及响应状态码等方面,并深入探讨了浏览器是如何解析与渲染页面的完整流程。
「offer来了」浏览器原理被问懵?5大知识板块巩固你的http知识体系(3.6w字)
|
7月前
|
存储 JavaScript API
❤Nodejs 第十三章(文件上传接口以及token添加)
【4月更文挑战第13天】Nodejs第十三章介绍了文件上传接口和Token添加。使用Multer库处理文件上传,设置存储引擎和静态文件目录,定义上传接口,支持单个文件上传。上传成功返回文件信息和访问路径。为解决静态文件访问需要Token认证的问题,更新expressjwt配置,排除包含uploads的路径,确保静态文件可正常访问。
135 2
|
7月前
|
前端开发
前端知识笔记(七)———Get和Post的区别是什么?
前端知识笔记(七)———Get和Post的区别是什么?
72 0
字节算法大神手写的算法笔记,曾连续多次霸榜 GitHub Trending 首页
学算法也好,学技术也好,我觉得做任何事情,一定要明白自己的目标是什么。 可以量化的才叫目标 你想变有钱,想学好算法,这就叫无法量化的目标,有多少钱才算有钱,学到什么程度才算学好?量化的一个最大的特点是可以拆分。 比如说目标是进大厂,计划半年内刷300道题,那这可以反向拆分,每个月刷50道,工作日每天刷两道,休息日每天刷一道,再细化,每天几点到几点固定为刷题时间,期间屏蔽所有应用通知,专心做题思考;然后每天反省刷题计划是否达标,如果没达标,是为什么,怎么弥补。 这就是计算机的递归思维,自顶向下,逐步求精,反向求解。 为了让大家更好地学习算法,楼主在这里分享一份字节跳动大神手写的算法笔记
|
前端开发
#yyds干货盘点# 前端歌谣的刷题之路-第七十二题- url地址
#yyds干货盘点# 前端歌谣的刷题之路-第七十二题- url地址
114 0
#yyds干货盘点# 前端歌谣的刷题之路-第七十二题- url地址
|
开发框架 数据安全/隐私保护
FastAPI 学习之路(十六)Form表单
FastAPI 学习之路(十六)Form表单
FastAPI 学习之路(十六)Form表单
|
开发框架 JSON 数据格式
FastAPI 学习之路(十八)表单与文件
FastAPI 学习之路(十八)表单与文件
FastAPI 学习之路(十八)表单与文件
|
数据安全/隐私保护
FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2
FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2
FastAPI 学习之路(二十八)使用密码和 Bearer 的简单 OAuth2

热门文章

最新文章