为什么CF UAA check_token端点需要clientId / clientSecret?

时间:2014-09-02 15:40:18

标签: java spring oauth-2.0 cloudfoundry-uaa

CloudFoundry的UAA有一个RemoteTokenServices类(也是Spring oauth2的一部分),它通过转到UAA服务器的check_token端点来进行授权令牌验证。 UAA的示例 api app 应用程序分别用作资源服务器和客户端应用程序。

来自示例 api的 spring-servlet.xml:

<bean id="tokenServices" class="org.cloudfoundry.identity.uaa.oauth.RemoteTokenServices">
    <property name="checkTokenEndpointUrl" value="${checkTokenEndpointUrl}" />
    <property name="clientId" value="app" />
    <property name="clientSecret" value="appclientsecret" />
</bean>

您知道为什么这个类(以及需要在Authorization标头中编码这些值的check_token端点)需要clientId和clientSecret吗?在我看来,它从资源服务器依赖于客户端应用程序。如果其中一个客户端机密在这里“硬编码”,我如何使用多个客户端应用程序?

1 个答案:

答案 0 :(得分:1)

我通过彻底阅读UAA documentation来弄明白自己,我仍然认为它在UAA示例应用程序中令人困惑:

  • clientId和clientSecret值应该是示例中 api应用程序 api / apiclientsecret )的客户端ID /机密,因为资源服务器应该验证本身在调用check_token端点时使用基本身份验证的UAA服务器,以便UAA可以确定请求是由有效的注册资源服务器发出的。
  • 为了能够做到这一点,资源服务器还必须在UAA中注册为客户端, client_credentials 为authorized-grant-type。
  • 应检查的令牌将在POST请求正文中发送。