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>
您知道为什么这个类(以及需要在授权头中编码这些值的check_令牌端点)需要clientid和clientsecret吗?在我看来,它依赖于来自资源服务器的客户机应用程序。如果其中一个客户端机密在这里是“硬编码”的,我如何使用多个客户端应用程序?
最佳答案
我已经通过仔细阅读uaadocumentation找到了答案,但我仍然认为uaa示例应用程序中的问题令人困惑:
clientID和clientSecret值应为示例中API应用程序(API/APIClientCret)的客户端ID/机密,因为资源服务器在调用check_令牌终结点时应使用基本身份验证对UAA服务器进行身份验证,以便UAA可以确保请求是由有效的已注册资源服务器发出的。
要做到这一点,资源服务器还必须在uaa中注册为客户端,并将客户端凭据作为授权授予类型。
应检查的令牌在post请求正文中发送。
关于java - 为什么CF UAA check_token端点需要一个clientId/clientSecret?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25627275/