0

我正在通过 Django Rest Framework (v3.9.4) 在 Django (v2.2) 中创建一个带有 REST 后端的项目。此 REST API 供 SPA 和在外部服务器上运行的无头应用程序使用。所有视图都需要具有适当权限的用户身份验证。

前端 SPA 能够使用会话身份验证并将其传递给 REST API 没有问题。但是,会话身份验证不适用于无头服务器和我们也希望能够使用 API 的自治功能。

我已经决定使用 Django OAuth Toolkit (v1.2.0) 来提供使用 OAuth2 的身份验证。

我的问题如下。希望从一些无头环境中使用 API 的开发人员可以使用基于密码或客户端凭据授予类型(或任何其他类型,实际上)生成访问令牌。这为他们提供了访问令牌、到期时间和刷新令牌。

对于有状态服务器的应用程序,他们可以将访问和刷新令牌存储在文件、环境变量等中。当令牌过期时,他们可以使用刷新令牌获取新的访问令牌,并覆盖文件或环境变量以便它在未来可用。

但是,我们的一些应用程序以 Google Cloud Functions 或 Jenkins 部署的 Docker 容器的形式存在。使用不会过期的访问令牌,我们可以像任何其他秘密凭证一样将令牌传递到这些令牌中,并且应用程序会很好运行。我的问题的症结在于,当访问令牌过期时,这些无服务器应用程序应该做什么?他们将需要使用刷新令牌,但新的访问令牌需要在未来调用 Cloud Function(需要重新部署以设置环境变量)或 Docker 容器(通过 Jenkins 的凭据管理器再次设置环境)时可用容器中的变量)。

默认情况下,令牌每小时到期一次,并且无法禁用到期。我想避免将到期时间设置为大量的解决方法。

任何关于直接解决方案或其他管理受信任客户端中过期访问令牌的最佳实践的建议都将不胜感激!


编辑澄清 在谷歌云函数中,我们可以将访问令牌设置为可用作该函数的所有调用的环境变量(特别是加密的环境变量,使用谷歌KMS解密)。该环境变量在云函数中读取,并通过Authorization: Bearer <token>标头传递给 API 请求。当访问令牌过期时,我们需要更新环境变量以供将来调用,这将涉及通过gcloud functions命令行工具重新部署云功能。

4

0 回答 0