面向FastAPI的基于密钥的安全包,注重使用的简单性

fastapi-simple-securit的Python项目详细描述


FastAPI简单安全

针对FastAPI的基于密钥的安全包,注重使用的简单性:

  • 全功能开箱即用,无需配置
  • 本地sqlite后端的API密钥安全性,同时使用头和查询参数
  • 通过管理员端点自动创建、撤消、弃用和使用日志
  • 没有依赖关系,只需要FastAPI和python标准库

安装

pip install fastapi_simple_security

使用

创建应用程序

fromfastapi_simple_securityimportapi_key_router,api_key_securityfromfastapiimportDepends,FastAPIapp=FastAPI()app.include_router(api_key_router,prefix="/auth",tags=["_auth"])@app.get("/secure",dependencies=[Depends(api_key_security)])asyncdefsecure_endpoint():return{"message":"This is a secure endpoint"}

产生的应用程序是:

app

通过文档创建API密钥

启动API并检查日志中是否有自动生成的密钥(如果您没有通过提供密钥) 环境变量。在

secret

转到API上的/docs,并在Authorize/Secret header框中通知此密钥。 所有管理员终结点都只支持头安全性,以确保密钥不会被无意中泄露 共享URL时共享。在

secret_header

然后,可以使用/auth/new生成一个新的API密钥。在

api key

最后,您可以使用这个API密钥来访问安全端点。在

secure endpoint

python中API密钥的创建

当然,您可以使用requests通过python自动获取API密钥,并直接查询端点。在

如果这样做,可以使用环境变量从API文档中隐藏端点 FASTAPI_SIMPLE_SECURITY_HIDE_DOCS。在

配置

环境变量:

  • FASTAPI_SIMPLE_SECURITY_SECRET:密钥管理员密钥
    • 如果未提供,则在服务器启动时自动生成
    • 允许生成新的API密钥、撤消现有的API密钥以及API密钥使用情况视图
    • 它被泄露会损害API的安全性
  • FASTAPI_SIMPLE_SECURITY_HIDE_DOCS:是否从文档中隐藏与API键相关的端点
  • FASTAPI_SIMPLE_SECURITY_DB_LOCATION:本地sqlite数据库文件的位置
    • /应用程序/sqlite.数据库默认情况下
    • 在Docker内部运行应用程序时,使用绑定挂载来实现持久性。在
  • FAST_API_SIMPLE_SECURITY_AUTOMATIC_EXPIRATION:API密钥被视为过期之前的持续时间(以天为单位)
    • 默认15天

贡献

运行开发环境

附加的docker映像使用密钥TEST_SECRETlocalhost:8080上运行一个测试应用程序。运行时使用:

^{pr2}$

所需捐款

  • 单元测试
  • 更多合理违约的选择
  • 每个API密钥的日志记录?在
  • 更多API密钥存储的后端选项?在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用户界面java,使用gui连接到另一台计算机/服务器的文件系统   运行sbt的ubuntu返回错误:“javahome需要<path>参数”   java如何在Android中处理许多ImageView而不出现内存问题?   查询中非法字符的java相同URL失败   安卓取消引用可能会产生“java”。lang.NullPointerException'   java中的indexoutofboundsexception“java.lang.ArrayIndexOutOfBoundsException”错误   xml Java将dom保存到文件>文件在程序结束后由另一个进程打开   Java的垃圾收集器是如何工作的?   Java如何筛选值(列表)   java处理字符串我怎样才能像在真实的书籍中一样在上面部分生成“小数字”呢?   java SonarQube是否有一个API来获取所有项目分析的一部分?   java startActivity(intent)什么都不做   JAVAutil。扫描器类Java   java如何从Firebase更新电子邮件?UpdateMail方法已被弃用   java Hibernate。如何正确组织带有注释的onetomany关系?   在java中获得卷标和驱动器号之间的映射(而不是FileSystemView)的解决方法是什么   java查找文件的路径