FastAPI 中基于 Cookie 的身份验证

时间:2021-03-27 22:08:56

标签: openapi fastapi

我希望在我的 FastAPI 应用程序中集成基于 Cookie 的身份验证。我也希望它能够与 swagger 无缝协作。

我想要一条路线(例如:/login)来设置我的浏览器 cookie。所有其他受保护的路由在装饰器中使用 Depends 来验证 cookie 中存在的密钥。如何让它与 OpenAPI 授权按钮一起使用?

此处的重要因素是与 FastAPI 自动生成的 Swagger/OpenAPI 文档集成。

1 个答案:

答案 0 :(得分:1)

您可以查看实现基于 cookie 的身份验证的 fastapi-users 模块(它也实现了其他与用户管理相关的内容,因此无论如何都值得一看!)。

根据coookie docs

<块引用>

配置

from fastapi_users.authentication import CookieAuthentication

SECRET = "SECRET"

auth_backends = []

cookie_authentication = CookieAuthentication(secret=SECRET, lifetime_seconds=3600)

auth_backends.append(cookie_authentication)

如您所见,实例化非常简单。你只需要定义 用于对令牌和生命周期进行编码的常量 SECRET cookie(以秒为单位)。

您还可以为生成的 cookie 定义参数:

  • cookie_name (fastapiusersauth):cookie 的名称。
  • cookie_path (/):Cookie 路径。
  • cookie_domain(无):Cookie 域。
  • cookie_secure (True):是否仅通过 SSL 请求将 cookie 发送到服务器。
  • cookie_httponly (True):是否阻止通过 JavaScript 访问 cookie。
  • cookie_samesite (lax):一个字符串,为 cookie 指定相同的站点策略。有效值为“lax”、“strict”和“none”。 默认为“宽松”。

然后您可以在 login 端点上使用 POST 请求 /login 并在浏览器上设置 cookie。

我没有找到有关自动 OpenAPI 集成的信息,但由于登录是在浏览器上设置 cookie,因此您可以登录一次然后使用 API。