Фильтр базовой аутентификации и точка входа аутентификации фактически не используются из запроса токена Spring oauth2

Я реализовал поток владельца ресурса с помощью Spring oauth2 на основе Spring 'Пример приложения Sparklr и несколько примеров, которые я нашел в Интернете. Я проверил часть запроса токена с помощью curl, чтобы предоставить учетные данные клиента и пользователя:

curl -v --data "username=user1&password=user1&client_id=client1&client_secret=client1&grant_type=password" -X POST "http://localhost:8080/samplerestspringoauth2/oauth/token"

и это работает правильно, однако я сделал следующее наблюдение:

Хотя в соответствии с примерами, которые я видел, я использую фильтр BasicAuthentication, на самом деле он не используется в процессе безопасности. Поскольку запрос токена не содержит заголовок Authentication, фильтр BasicAuthentication просто пропускает любые проверки. ClientCredentialsTokenEndpointFilter и аутентификационный сервер - единственные, кто выполняет проверки безопасности во время запроса токена. Заметив это и проверив его с помощью отладки, я попытался полностью удалить следующую часть:

из конфигурации. Но потом я получил предупреждение:

Не удалось установить AuthenticationEntryPoint. Убедитесь, что у вас есть механизм входа, настроенный через пространство имен (например, форма входа в систему) или укажите пользовательский AuthenticationEntryPoint с помощью 'точка входа-ссылка» атрибут».

В качестве следующего шага я добавил entry-point-ref = "clientAuthenticationEntryPoint в пространстве имен http, и избавился от предупреждения. Я протестировал приложение и играл правильно.

Однако в дополнение к вышесказанному я также сделал следующее наблюдение во время отладки: ClientCredentialsTokenEndpointFilter, содержит собственную точку входа OAuth2AuthenticationEntryPoint внутри частной переменной и использует ее при сбое из-за неправильных учетных данных клиента. Поэтому не имеет значения, какую точку входа я указываю ни в базовом фильтре, ни в пространстве имен http. В конце ClientCredentialsTokenEndpointFilter будет использовать свой собственный OAuth2AuthenticationEntryPoint. Подводя итог моим выводам, представляется следующее:

Основной фильтр не используется и может быть удален, если вместо этого мы указываем конечную точку в пространстве имен http.Указание базового фильтра или конечной точки в пространстве имен http необходимо только для того, чтобы компилятор прекратил предупреждение. Они не имеют практического применения, а используемая конечная точка жестко закодирована внутри ClientCredentialsTokenEndpointFilter.

Ниже я поставил http и конфигурацию конечной точки для запроса токена для вашей ссылки. Я пропускаю оставшуюся часть конфигурации для удобства чтения сообщения:


        
        
        
        
        
    


        
        
    

Я также предполагаю, что та же проблема возникает и в исходной конфигурации приложения sparklr (которая является примером приложения spring oauth2) для запроса токена, который очень похож. Это можно найти вhttps://github.com/spring-projects/spring-security-oauth/blob/master/samples/oauth2/sparklr/src/main/webapp/WEB-INF/spring-servlet.xmlи соответствующая часть ниже:


                
                
                
                
                
                
                
                
                
        

Я ожидал бы, что Spring oauth2 будет более подходящим образом взаимодействовать с Spring Security вместо того, чтобы вводить ненужную и вводящую в заблуждение конфигурацию, и это заставляет меня думать, что я, возможно, что-то упустил. Поскольку безопасность является чувствительным аспектом, я хотел бы поделиться этим с вами и спросить, верен ли мой вывод.

Ответы на вопрос(1)

Ваш ответ на вопрос