我正在尝试了解和实现我们的新 REST 服务器和我们现有的客户端应用程序之间的客户端凭据流。我已经像这样设置了 spring-security 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 服务器免受外部访问。
看起来我可能对整个客户端凭据流程或那里的 spring-security 应用有一些误解,所以任何澄清都将不胜感激。