Spring security @oAuth 2.0 revokeToken的框架端点

Spring security @oAuth 2.0 revokeToken的框架端点,spring-security,oauth-2.0,Spring Security,Oauth 2.0,我有一个基于@FrameworkEndpoint的控制器来实现令牌的删除,如下所示 @FrameworkEndpoint public class RevokeTokenEndpoint { @Resource(name = "tokenServices") ConsumerTokenServices tokenServices; @RequestMapping(method = RequestMethod.DELETE, value = "/oauth/toke

我有一个基于@FrameworkEndpoint的控制器来实现令牌的删除,如下所示

@FrameworkEndpoint
public class RevokeTokenEndpoint {

    @Resource(name = "tokenServices")
    ConsumerTokenServices tokenServices;



    @RequestMapping(method = RequestMethod.DELETE, value = "/oauth/token")
    @ResponseBody
    public void revokeToken(HttpServletRequest request) {
        String authorization = request.getHeader("Authorization");
        if (authorization != null && authorization.contains("Bearer")) {
            String tokenId = authorization.substring("Bearer".length() + 1);
            System.out.println("tokenId : " + tokenId);
            tokenServices.revokeToken(tokenId);
            //tokenStore.removeRefreshToken(token);


        }
    }

}
我的请求是一个具有授权持有人ce8b914d-57db-4ad7-86d9-be2d7f47b203的删除请求

问题是端点根本没有被命中,返回的消息是未经授权的。当我使用带有客户机id和密码的授权Basic启动请求时,它确实到达了终点。但在这种情况下,我将被迫传递另一个参数或头来携带令牌,并更改代码以从另一个参数或头获取令牌的值


我相信,理想的方法是告诉spring security允许未经授权的调用删除访问令牌。这有意义吗?如果是,那么如何实现呢?

我已经这样实现了

@PostMapping("/token/revoke")
    public ResponseEntity<Boolean> revokeToken(
            @RequestHeader(value = "Authorization") final String tokenId) {
        try {
            final String[] token = tokenId.split("\\s+");
            tokenServices.revokeToken(token[1]);
            return new ResponseEntity<>(true, HttpStatus.OK);
        } catch (final Exception e) {
            LOGGER.info("Exception while removing access token");
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
令牌ID包含承载b133b6ee-59db-4809-b546-e47cb879bea1。通过这种方式,我已经实现了它,并且工作得很好