Spring security @oAuth 2.0 revokeToken的框架端点
我有一个基于@FrameworkEndpoint的控制器来实现令牌的删除,如下所示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
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。通过这种方式,我已经实现了它,并且工作得很好