我有一个访问令牌和一个使用我的 cf 凭据生成的刷新令牌。我希望我的使用 CF API 的应用程序能够长时间连续运行,因此当访问令牌过期时,我将使用刷新令牌生成一个新的。但据我了解,刷新令牌也会过期,因此授权会话是有限的。我可以使用我的凭据生成一个新的访问令牌,但我不想将它们存储在代码文件或环境变量中。我能做点什么吗?
2 回答
要使其正常工作,您需要一个 UAA 客户端。与其传递您的访问/刷新令牌,不如传递一个 UAA 客户端和密码。然后,您将执行客户端凭据授予,以使用您的 UAA 客户端和密钥获取访问令牌。这会产生一个访问/刷新令牌,您可以使用该令牌向云控制器发出请求。
您通常会通过环境变量或作为用户提供的服务将 UAA 客户端和客户端密钥发送到您的应用程序。但是,如果您的环境中可用,您可以使用其他东西(CredHub、Vault 等)。
如果您使用 Java,cf-java-client 将为您处理所有这些。您PasswordGrantTokenProvider
可以使用ClientCredentialsGrantTokenProvider
.
也就是说,您实际上并不需要一个特殊的库。您可以使用您选择的编程语言中可用的任何 Oauth2 库,只要它支持客户端凭据授予类型。
如果您不想在代码中执行此操作,@poy 的回答也不错。它通过在代理中处理我上面提到的内容来启用访问。只要您的请求通过代理,它们就会使用访问令牌进行注释。
在部署它之前,请确保您了解代理正在做什么,并确保您了解如何正确保护它。任何可以访问代理的东西都可以发送授权请求,所以你真的需要确保它被正确锁定。
希望有帮助!
查看CF-Space-Security。它让您通过在您的进程旁边运行并管理令牌的进程进行代理。