ITPub博客

首页 > 数据库 > 数据库开发技术 > fastapi框架系列-HTTP 身份验证系统方案-HttpBasic 基本认证

fastapi框架系列-HTTP 身份验证系统方案-HttpBasic 基本认证

原创 数据库开发技术 作者:程序员小钟同学 时间:2022-04-04 20:10:27 0 删除 编辑

HTTP 身份验证系统方案-HTTPBasic 基本认证

在基于标准的 HTTP 身份验证系统方案中包括:HTTPBasic 基本认证和HTTPDigest摘要认证。Http Basic 认证是 Web 服务器和客户端之间进行认证的方式,是一种较为简单的HTTP认证方式。

HTTPBasic 认证流程图示

从上图可以看出HttpBasic的认证过程主要包含以下几个主要的步骤:

步骤1:当客户端请求了需要进行 Basic 认证的资源服务器

步骤2:资源服务器响应带有 401 unauthorized 状态码以及 WWW-Authenticate 首部字段的报文信息。

步骤3:浏览器方式弹出需要提交用户明和密码输入框,在输入用户名和密码

步骤4:然后根据响应报文信息客户端通过明文Base64编码方式把【用户名:密码】组成字符串放在HTTP Request中的Header Authorization中到然后提交服务端进行认证。

步骤5:服务端会接收接收前端提交的Header  Authorization 请求头字段信息字段的请求后,自动对其正确性进行验证。如验证通过,则返回一条包含 Request-URI 资源的响应;如果校验失败,则会返回401响应码错误。

关于HttpBasic认证,从上述的我们可以看到很明细的缺点:

● 用户名和密码明文(Base64)传输,容易被逆向。

● 数据传输过程是由的HTTP,容易出现拦截,需要配合HTTPS来保证信息传输的安全。

●  存在第三方的利用通过加密后的用户名和密码进行重放攻击风险等等。

FastApi中使用HTTPBasic

Fastapi本身已封装好具体HTTPBasic的模块,如实示例代码所示:

from fastapi import Depends
from fastapi import FastAPI
from fastapi.security import HTTPBasic, HTTPBasicCredentials
from fastapi.exceptions import HTTPException
from fastapi.responses import PlainTextResponse
from starlette.status import HTTP_401_UNAUTHORIZED

app = FastAPI(
    title="HTTPBasic认证示例",
    description='HTTPBasic认证示例项目演示例子',
    version='v1.1.0',
)

security = HTTPBasic()

@app.get("/login")
async def login(credentials: HTTPBasicCredentials = Depends(security)):
    if credentials.username != "xiaozhongtongxue" or credentials.password != "xiaozhongtongxue":
        raise HTTPException(
            status_code=HTTP_401_UNAUTHORIZED,
            detail="用户名或密码错误",
            headers={"WWW-Authenticate": "Basic"},
        )
    else:
        return PlainTextResponse('登入成功')


if __name__ == '__main__':
    import uvicorn

    uvicorn.run('main:app', host="127.0.0.1", port=8000, debug=True, reload=True)

代码解析如下:

● 首先定义了app服务对象,并设置部可交互API文档一些信息。

● 从 fastapi.security模块导入HTTPBasic,并创建了一个基础认证HTTPBasic()的对象security。

● 定义一个logic路由函数,并且在对于的路径函数上把HTTPBasic()的对象security当做一个依赖项进行依赖注入。

● 在路由函数内部逻辑进行前端提交的用户名和密码的验证。如果验证和条件不符则返回401的验证错误。如果成功则爱人会登入成功字样信息。

此时我们的启动服务,然后通过可交互API文档查看我们的HTTPBasic 认证。如下图所示结果:

通过上面图示可以看到,对于API接口都出现了一把锁图标,此时表示我们的API接口需要进行授权认证处理才可以进行访问。此时随意点击某一个把锁,则显示要求我们需要输入相关用户名和密码信息如下图所示:

然后我们的根据路由函数中要求匹配的用户名和密码进行输入验证,此时会显示:

然后我们的此时在请求访问我们的logic请求接口,此时我们的不需要在输入用户名和密码,可以看到我们的成功的访问,且访问了‘登入成功’信息。

总结

以上仅仅是个人结合自己的实际需求,做学习的实践笔记!如有笔误!欢迎批评指正!感谢各位大佬!

结尾

END

简书:https://www.jianshu.com/u/d6960089b087

掘金:https://juejin.cn/user/2963939079225608

公众号:微信搜【程序员小钟同学】

小钟同学 | 文 【欢迎一起学习交流】| QQ:308711822


原文作者:程序员小钟同学;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-02-20

  • 博文量
    224
  • 访问量
    111688