Доступ к запросу токена из JdbcTokenStore

Я новичок в Spring Boot и Oauth, внедряю Oauth Security в свою систему, и у меня есть сомнения относительно запросов JdbcTokenStore.

Я видел DEFAULT_ACCESS_TOKEN_SELECT_STATEMENT = "select token_id, token from oauth_access_token where token_id =?" в коде JdbcTokenStore.

Я попытался получить токен от oauth/token с client_id1 и проверил токен с client_id2, наконец, я получил успешный ответ, потому что он просто фильтрует token_id.

Я ожидал ошибку типа «токен не найден» или что-то подобное.

Должен ли этот запрос иметь такое поведение?

ОБНОВЛЕНИЕ

У меня AuthorizationServer и ResourceServer разделены, на моем AuthorizationServer я получаю ClientDetails из базы данных, и у меня есть две записи:

client_details_entries

В моем веб-приложении я использую первый ClientDetails для получения действительного токена с помощью:

$ curl seiafiscalizacao:seiafiscalizacao123@localhost:8080/seia-auth-server/oauth/token -d grant_type=password -d username=username -d password=pwd

В oauth_access_token я получил новую запись, связывающую token_id с client_id:

access_token_entry

На моем ResourceServer у меня есть RemoteTokenServices со следующими конфигурациями (второй ClientDetails):

@Bean
@Primary
public RemoteTokenServices tokenService() {

    RemoteTokenServices tokenService = new RemoteTokenServices();
    tokenService.setCheckTokenEndpointUrl("http://localhost:8080/seia-auth-server/oauth/check_token");
    tokenService.setClientId("seiafiscalizacao2");
    tokenService.setClientSecret("seiafiscalizacao123");
    return tokenService;
}

Наконец, когда я пытаюсь получить какой-либо ресурс с моего ResourceServer, я получаю ответ об успехе, даже используя другой client_id:

success_from_resourceserver_?

Когда я открыл код JdbcTokenStore из org.springframework.security.oauth2.provider.token.store, я увидел private static final String DEFAULT_ACCESS_TOKEN_SELECT_STATEMENT = "select token_id, token from oauth_access_token where token_id = ?"; и понял, почему я добился успеха.

Я не получаю никаких ошибок или исключений, но мне интересно проверить мой токен с другим client_id и добиться успеха.

Как я уже говорил, я новичок в Oauth и не знаю, ожидалось ли это.

Для доступа к ResourceServer я использую RESTClient из Firefox

Моя версия SpringBoot — 1.5.10.RELEASE

Мой сервер приложений — Wildfly 10.1

На данный момент мой проект очень сложен для публикации, но если вам нужно, я могу сделать новый с несколькими последними вещами.


person Tulio Adorno    schedule 19.03.2018    source источник


Ответы (1)


Спецификация OAuth2 не определяет это, см. RFC 6749:

10.3. Токены доступа

[...]

Эта спецификация не предоставляет серверу ресурсов каких-либо методов для обеспечения того, чтобы маркер доступа, представленный ему данным клиентом, был выдан этому клиенту сервером авторизации.

Следовательно, Spring Security OAuth2 не проверяет это.

Более того, RemoteTokenServices является функцией Spring Security OAuth2 и вообще не распространяется на спецификацию OAuth2, см. Руководство по OAuth 2 для разработчиков

Альтернативой является RemoteTokenServices, который представляет собой функцию Spring OAuth (не часть спецификации), позволяющую серверам ресурсов декодировать токены через ресурс HTTP на сервере авторизации (/oauth/check_token).

person dur    schedule 20.03.2018