3

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

从示例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 吗?在我看来,它依赖于资源服务器的客户端应用程序。如果其中一个客户端机密在此处“硬编码”,我如何使用多个客户端应用程序?

4

1 回答 1

1

通过彻底阅读 UAA文档,我自己弄清楚了,但我仍然认为 UAA 示例应用程序令人困惑:

  • clientId 和 clientSecret 值应该是示例中api 应用程序( api/apiclientsecret ) 的客户端 id/secret,因为在调用 check_token 端点时,资源服务器应该使用基本身份验证向 UAA 服务器进行身份验证,以便 UAA 可以确保该请求是由一个有效的、已注册的资源服务器发出的。
  • 为此,资源服务器还必须在 UAA 中注册为客户端,其中client_credentials为授权授予类型。
  • 应检查的令牌在 POST 请求正文中发送。
于 2014-10-14T09:49:13.620 回答