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

Posted

技术标签:

【中文标题】为啥 CF UAA check_token 端点需要 clientId/clientSecret?【英文标题】:Why does CF UAA check_token endpoint need a clientId/clientSecret?为什么 CF UAA check_token 端点需要 clientId/clientSecret? 【发布时间】:2014-10-26 22:45:10 【问题描述】:

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

【问题讨论】:

【参考方案1】:

我已经通过彻底阅读 UAA documentation 自己弄清楚了,但我仍然认为 UAA 示例应用程序中的内容令人困惑:

clientId 和 clientSecret 值应该是示例中 api 应用程序 (api/apiclientsecret) 的客户端 ID/秘密,因为资源服务器应该验证 在调用 check_token 端点时,将其自身发送到具有基本身份验证的 UAA 服务器,以便 UAA 可以确定请求是由有效的已注册资源服务器发出的。 为此,资源服务器还必须在 UAA 中注册为客户端,client_credentials 为授权授予类型。 应检查的令牌在 POST 请求正文中发送。

【讨论】:

以上是关于为啥 CF UAA check_token 端点需要 clientId/clientSecret?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XML 使用 Spring Security Oauth2 启用 /oauth/check_token

仅具有客户端凭据的 Spring 安全端点(基本)

/oauth/check_token无法访问的问题

CF1251D Salary Changing

cf689d ST表RMQ+二分

CF765F Souvenirs