我试图理解和执行客户端凭证我们新的REST服务器和我们现有的客户端应用程序之间流动。 我设置弹簧安全的OAuth2喜欢这样 。 从我的理解,到目前为止,我的服务器现在应该支持以下要求:
$ curl -X -v -d 'client_id=the_client&client_secret=secret&grant_type=client_credentials' -X POST "http://localhost:9090/oauth/token"
但我得到
InsufficientAuthenticationException: There is no client authentication
造成Principal
存在null
点击这里(弹簧安全码):
@FrameworkEndpoint
@RequestMapping(value = "/oauth/token")
public class TokenEndpoint extends AbstractEndpoint {
@RequestMapping
public ResponseEntity<OAuth2AccessToken> getAccessToken(Principal principal,
@RequestParam("grant_type") String grantType, @RequestParam Map<String, String> parameters) {
if (!(principal instanceof Authentication)) {
throw new InsufficientAuthenticationException(
这么看来,我需要先对服务器进行身份验证 。 但是,这不是我想做的事情 。 我想我的两个服务器的使用共享密钥来相互交谈。 基于OAuth的认证服务器提供商应根据要求提供一个访问令牌(信任)客户端服务器,以便客户端服务器就可以使用该令牌来访问服务器上的所有REST资源。 这应该保护REST资源来自外部的访问。
后来我想提供选择的资源给第三方,并最终实现对服务器到服务器通信的一些更细粒度的安全性为好。 但现在我需要保护REST服务器从外部访问。
看起来我可能对整个客户端凭证流或弹簧安全的应用就在那里,所以任何澄清,将不胜感激一些误解。