在无服务器应用程序中刷新OAuth2访问令牌

时间:2019-07-10 19:19:14

标签: django oauth-2.0 django-rest-framework google-cloud-functions django-oauth

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

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

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

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

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

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

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

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


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

0 个答案:

没有答案