Не найден поставщик для класса org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken - PullRequest
1 голос
/ 20 января 2020

Я создал три приложения: «Spring Cloud Gateway (8081)», «Spring oauth2 Auth Server (8094)» и «Spring oauth2 Сервер ресурсов (8097)».

Когда я хочу запросить Сервер ресурсов, сначала мне нужно запросить gw, он перенаправляется на сервер oauth, и я вхожу туда (у oauth также есть уровень безопасности Spring). После успешного входа в систему он перенаправляет на сервер gw такой код http://localhost: 8081 / login / oauth2 / code / gateway? Code = 6ldKVF & state = 0WvvWdTs8G_XchSTQKqgokua_XDVQziqVZ_VXLMqIS0% 3D url. затем на экране произошла ошибка.

При успешном входе на сервер авторизации в консоли сервера шлюза появляется журнал трассировки:

2020-01-17 17: 52: 11.825 TRACE 11336 --- [т е р-HTTP-NiO-4] oshttp.code * * * тысяча тридцать-девять 1040 * .Jackson2JsonDecoder:. [21762c89] декодированного [{access_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsib2F1dGgyLXJlc291cmNlIl0sInVzZXJfbmFtZSI6ImRnIiwic2NvcGUiOlsiY3VzdG9tX21vZCJdLCJleHAiOjE1NzkyNzI3NDEsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwianRpIjoiOWUzYzQ2YTQtMDJiZi00MTgwLTg1ZTktMGJhOTM0MjBhYjg4IiwiY2xpZW50X2lkIjoiZmlyc3QtY2xpZW50In0.xdWGm420tvp2Rzq0AyCgOTcDuKvP-V6JFd76KmJJf7o, token_type = носителем, refresh_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 .eyJhdWQiOlsib2F1dGgyLXJlc291cmNlIl0sInVzZXJfbmFtZSI6ImRnIiwic2NvcGUiOlsiY3VzdG9tX21vZCJdLCJhdGkiOiI5ZTNjNDZhNC0wMmJmLTQxODAtODVlOS0wYmE5MzQyMGFiODgiLCJleHAiOjE1NzkyNzI3NTEsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwianRpIjoiYzEyNWExM2ItMmMzYS00ZGM0LWJjODgtZDc4ZDk1ZTljNzQ5IiwiY2xpZW50X2lkIjoiZmlyc3QtY2xpZW50In0.K hRIy7wOH2IsswDZ_AIXVFdtu6JZqtiLBZGZIypeNRw, expires_in = 9, scope = custom_mod, jti = 9e3c46a4-02bf-4180-85e9-0ba93420ab88}]

, когда я получаю здесь доступ к 1015 *1013* 1013 *1013* 1013 *1013* 1013 *1013* 1013 *1013* 1013 *1013* 1013 *1013* 1013 *1013* 1013 * *1013* 1013 * * *1013* 1013 * * *1013* 1013 * *1013* 1014

1014 *1014* 1014 *1014* 1014 *1013* * * * * * * * * * *1013* 101 * *1013* 1013 * * *1013* 1013 * * * * * * * *1013* 1013 * * * * * * * * * * * * * * * * * * * * * 10 *

Я думаю, мне не хватает некоторых частей для реализации в шлюз-сервере или oauth-сервере, но я не смог найти. потому что, когда я пытался использовать okta вместо своего собственного сервера аутентификации, ошибки не было.

Шлюз application.properties

server.port=8081
spring.security.oauth2.client.registration.gateway.client-id=first-client
spring.security.oauth2.client.registration.gateway.client-secret=noonewilleverguess
spring.security.oauth2.client.registration.gateway.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.gateway.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}

spring.security.oauth2.client.provider.gateway.authorization-uri=http://localhost:8094/oauth/authorize
spring.security.oauth2.client.provider.gateway.token-uri=http://localhost:8094/oauth/token?scope=custom_mod
spring.security.oauth2.client.provider.gateway.user-info-uri=http://localhost:8094/userinfo
spring.security.oauth2.client.provider.gateway.user-name-attribute=name

logging.level.root=trace

Вот сообщение об ошибке экрана:

Пт. 17 января 17:28:11 EET 2020 [83c168ec] Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500). Не найдено поставщика для класса org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken

Вот сообщение об ошибке консоли:

2020-01-17 17: 40: 27.204 ОШИБКА 7180 --- [ctor-http-nio-2] awreAbstractErrorWebExceptionHandler: [93951d85] 500 Ошибка сервера для HTTP-запроса GET "/ login / oauth2 / code / gateway? Code = n35lEN & state = fZ94ZsZySnUwaG1vS32cX *QRXRXRXRXRXRXRXRXRXR0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R0R4R 1034 *java .lang.IllegalStateException: не найден поставщик для класса org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken at org.springframework.security.web.server.authentication.AuthenticationWilter java: 118) ~ [spring-security-web-5.2.1.RELEASE.jar: 5.2.1.RELEASE] Подавлено: processor.core.publisher.FluxOnAssembly $ OnAssemblyException: ошибка обнаружена на следующих сайтах ): | _ контрольная точка ⇢ org.springframework.security.oauth2.client.web.server.aut hentication.OAuth2LoginAuthenticationWebFilter [DefaultWebFilterChain] | _ контрольно-пропускной пункт ⇢ org.springframework.security.oauth2.client.web.server.OAuth2AuthorizationRequestRedirectWebFilter [DefaultWebFilterChain] | _ контрольно-пропускной пункт ⇢ org.springframework.security.oauth2.client.web.server.OAuth2AuthorizationRequestRedirectWebFilter [DefaultWebFilterChain] | _ контрольная точка ⇢ org.springframework.security.web.server.context.ReactorContextWebFilter [DefaultWebFilterChain] | _ контрольная точка ⇢ org.springframework.security.web.server.csrf.CsrfWebFilter web.server.header.HttpHeaderWriterWebFilter [DefaultWebFilterChain] | _ контрольная точка ⇢ org.springframework.security.config.web.server. ServerHttpSecurity $ ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain] | _ контрольно-пропускной пункт ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain] | _ контрольная точка ⇢ HTTP GET "? / Логин / oauth2 / код / ​​шлюз код = n35lEN и состояние = fZ94ZsZySnUwaG1vS32cX4sXU9KJ6aRm58twQMrR9sQ% 3D" [ExceptionHandlingWebHandler ] Трассировка стека: org.springframework.security.web.server.authentication.AuthenticationWebFilter.lambda $ authenticate $ 5 (AuthenticationWebFilter. java: 118) ~ [spring-security-web-5.2.1.RELEASE.jar: 5.2. 1.RELEASE] в реакторе.core.publisher. Mono.subscribe (Mono. java: 4105) ~ [реактор-ядро-3.3.1.RELEASE.jar: 3.3.1.RELEASE] в реакторе.core.publisher.FluxSwitchIfEmpty $ SwitchIfEmptySubscriber.onComplete (FluxSwitchIfEmpty. * : 75) ~ [реактор-ядро-3.3.1.RELEASE.jar: 3.3.1.RELEASE]

edit: сокращено, чтобы понять проблему.

1 Ответ

1 голос
/ 17 февраля 2020

он успешно работал на uaa cloudfoun dry и okta, поэтому я отлаживаю, чтобы найти разницу между этими серверами и моим сервером, и отслеживаю, какие запросы происходят в шлюзе; / oauth / authorization, / oauth / token, / oauth / check_token и / userinfo соответственно. но не было никакого запроса / oauth / check_token, когда я использую свой сервер. это означает, что шлюз не может проверить токен, поэтому эта ошибка происходит и не выдает "никаких провайдеров ...". шлюз не может получить доступ к URL-адресу check_token авторизации из-за конфигурации безопасности.

Я изменил конфигурацию безопасности на сервере авторизации и разрешил URL-адреса, начинающиеся с "/ oauth", и он, наконец, работает как положено. (на самом деле, я написал "oauthServer.tokenKeyAccess (" allowAll () "). checkTokenAccess (" allowAll () "). allowFormAuthenticationForClients ();" в конфигурации сервера авторизации. Я подумал, что URL / oauth должны быть опубликованы c, но это не для причина, по которой я не знаю.)

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.requestMatchers().antMatchers("/login", "/oauth/**")
            .and().authorizeRequests().anyRequest().authenticated()
            .and().formLogin().permitAll();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...