Возможна ли анонимная аутентификация с предоставлением auth_code в Spring Security OAuth2? - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь реализовать клиент OAuth2 с SpringBoot 1.5.13 и spring-security-oauth2 2.0.15.RELEASE.

Я хочу иметь возможность авторизовать анонимных пользователей с предоставлением auth_code. Однако я сталкиваюсь с проблемами при попытке завершить sh поток аутентификации. Поскольку я не хочу вызывать какие-либо внешние службы для получения информации о личности пользователя, я использую DefaultTokenServices. Для DefaultTokenServices требуется TokenStore для его работы, поэтому я предоставляю самый простой - InMemoryTokenStore.

Я испробовал два подхода, которые оба потерпели неудачу:

1. Redirect to OAuth2ClientAuthenticationProcessingFilter

Если я перенаправлю пользователя после предоставления авторизации на URL-адрес, на который фильтруется OAuth2ClientAuthenticationProcessingFilter, фильтр правильно запрашивает и получает токен доступа. Однако, следующее, что он пытается сделать, это:

OAuth2Authentication result = tokenServices.loadAuthentication(accessToken.getValue());

И этот вызов не удается на BadCredentialsException("Could not obtain user details from token"), потому что DefaultTokenService пытается вызвать tokenStore#readAccessToken, но InMemoryTokenStore совершенно пуст этот пункт.

2. Перенаправление на другой URL (простой RestController)

Если я перенаправлю пользователя после предоставления авторизации на другой URL, который не соответствует OAuth2ClientAuthenticationProcessingFilter, я даже не смогу получить токен доступа. При попытке вызвать restTemplate.getAccessToken() в RestController, сбой вызова в AccessTokenProviderChain из-за этого исключения:

if (auth instanceof AnonymousAuthenticationToken) {
    if (!resource.isClientOnly()) {
        throw new InsufficientAuthenticationException(
                "Authentication is required to obtain an access token (anonymous not allowed)");
    }
}

РЕДАКТИРОВАТЬ: Я пытался использовать мою собственную реализацию AccessTokenProviderChain, которая просто пропускает эту проверку, и части, связанные с clientTokenServices, и на первый взгляд кажется, что это работает. Но я не уверен, что это правильный подход, достаточный для многопользовательской работы (несколько анонимных одновременных пользователей, авторизующихся через нескольких поставщиков OAuth2).

Очевидно, что моя авторизация - анонимная авторизация, мне нужно ан аноним поток авторизации! Я знаю, что это вполне возможно в Spring Security 5.2.x, но я не понимаю, как это сделать в spring-security-oauth2?

Разве невозможно выполнить анонимную авторизацию с помощью auth_code grant?

1 Ответ

0 голосов
/ 16 апреля 2020

Так что кажется, что анонимная аутентификация невозможна вместе с предоставлением OAuth2 auth_code, как объяснено в этой открытой ошибке: https://github.com/spring-projects/spring-security-oauth/issues/1842

Я решил эту проблему, отключив пружинную защиту Библиотека oauth и перемещена в Scribe Java.

...