有没有一种方法可以在不存储凭据的情况下从应用程序获取UAA访问令牌?

时间:2018-10-26 10:00:43

标签: cloudfoundry cloudfoundry-uaa

我有一个使用我的cf凭证生成的访问令牌和刷新令牌。我希望我的使用CF API的应用程序能够长时间连续运行,因此当访问令牌过期时,我将使用刷新令牌生成一个新的应用程序。但是据我了解,刷新令牌也将过期,因此授权会话受到限制。我可以使用我的凭据生成一个新的访问令牌,但是我既不想将它们存储在代码文件中,也不希望将其存储在环境变量中。我可以为此做些什么吗?

2 个答案:

答案 0 :(得分:0)

签出CF-Space-Security。它使您可以在进程旁边运行的进程中进行代理并管理令牌。

答案 1 :(得分:0)

要使其正常工作,您需要一个UAA客户端。而不是传递访问/刷新令牌,而是传递UAA客户端和密码。然后,您将使用您的UAA客户端和密码执行client credentials grant以获取访问令牌。这样会生成访问/刷新令牌,您可以使用该令牌向Cloud Controller发出请求。

通常,您会通过env变量或作为用户提供的服务将UAA客户端和客户端机密发送到您的应用程序。如果您的环境中可用,则可以使用其他东西(CredHub,Vault等)。

如果您使用的是Java,则cf-java-client将为您处理所有这一切。不用在下面的链接的示例中创建PasswordGrantTokenProvider,而是使用ClientCredentialsGrantTokenProvider

https://github.com/cloudfoundry/cf-java-client/tree/master#cloudfoundryclient-dopplerclient-uaaclient-builders

也就是说,您实际上并不需要特殊的库。您可以使用您选择的编程语言提供的任何Oauth2库,只要它支持客户端凭据授予类型即可。


如果您不想在代码中执行此操作,@ poy的答案也很好。它通过处理我在代理中提到的内容来启用访问。只要您的请求通过代理,它们就会被访问令牌注释。

在部署代理之前,请确保您了解代理正在执行的操作,并确保了解如何正确保护代理。有权访问代理的任何人都可以发送授权请求,因此您确实需要确保其已正确锁定。

希望有帮助!