@FrameworkEndpoint to oAuth 2.0 revokeToken - PullRequest
0 голосов
/ 30 мая 2018

У меня есть контроллер на основе @FrameworkEndpoint для реализации DELETE токена следующим образом

@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);


        }
    }

}

Мой запрос - это DELETE (http://localhost:8081/oauth/token запрос с авторизационным каналом ce8b914d-57db-4ad7-86d9-be2d7f47b203

Проблема заключается в том, что конечная точка вообще не получает попадания, а возвращаемое сообщение является «неавторизованным». Когда я запускаю запрос с помощью Authorization Basic с client_id и secret, тогда он действительно поражаетконечная точка. Но тогда в этом случае я буду вынужден передать другой параметр или заголовок для переноса токена и изменить код, чтобы получить значение токена из этого другого параметра или заголовка.

Я полагаю, чтоидеальным способом было бы сказать Spring Security, чтобы разрешить несанкционированным вызовам удалять токен доступа. Имеет ли это смысл? и если да, то как?

1 Ответ

0 голосов
/ 31 мая 2018

Я реализовал вот так

@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);
        }
    }

tokenId содержит канал-носитель b133b6ee-59db-4809-b546-e47cb879bea1 .Таким образом, я реализовал и работает нормально

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...