没有找到类 org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticatio
Posted
技术标签:
【中文标题】没有找到类 org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken 的提供者【英文标题】:No provider found for class org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken 【发布时间】:2020-05-06 04:05:57 【问题描述】:我创建了三个应用程序,分别为“spring cloud gateway(8081)”、“spring oauth2 auth server(8094)”和“spring oauth2 resource server(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 跟踪 11336 --- [ctor-http-nio-4] os.http.codec.json.Jackson2JsonDecoder :[21762c89] 解码 [=的access_token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsib2F1dGgyLXJlc291cmNlIl0sInVzZXJfbmFtZSI6ImRnIiwic2NvcGUiOlsiY3VzdG9tX21vZCJdLCJleHAiOjE1NzkyNzI3NDEsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwianRpIjoiOWUzYzQ2YTQtMDJiZi00MTgwLTg1ZTktMGJhOTM0MjBhYjg4IiwiY2xpZW50X2lkIjoiZmlyc3QtY2xpZW50In0.xdWGm420tvp2Rzq0AyCgOTcDuKvP-V6JFd76KmJJf7o, token_type=承载者, refresh_token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsib2F1dGgyLXJlc291cmNlIl0sInVzZXJfbmFtZSI6ImRnIiwic2NvcGUiOlsiY3VzdG9tX21vZCJdLCJhdGkiOiI5ZTNjNDZhNC0wMmJmLTQxODAtODVlOS0wYmE5MzQyMGFiODgiLCJleHAiOjE1NzkyNzI3NTEsImF1dGhvcml0aWVzIjpbIlJPTEVfQURNSU4iXSwianRpIjoiYzEyNWExM2ItMmMzYS00ZGM0LWJjODgtZDc4ZDk1ZTljNzQ5IiwiY2xpZW50X2lkIjoiZmlyc3QtY2xpZW50In0.KhRIy7wOH2IsswDZ_AIXVFdtu6JZqtiLBZGZIypeNRw, expires_in=9, 范围=custom_mod, jti=9e3c46a4-02bf-4180-85e9-0ba93420ab88]
当我解码访问令牌 jwt 时,结果如下。
"aud": [
"oauth2-resource"
],
"user_name": "dg",
"scope": [
"custom_mod"
],
"exp": 1579272741,
"authorities": [
"ROLE_ADMIN"
],
"jti": "9e3c46a4-02bf-4180-85e9-0ba93420ab88",
"client_id": "first-client"
我想,我缺少一些要在网关服务器或 oauth 服务器中实现的部分,但我找不到。因为当我尝试使用 okta 而不是我的自定义身份验证服务器时,没有错误。
网关应用程序.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
这是屏幕错误信息:
EET 2020 年 1 月 17 日星期五 17:28:11 [83c168ec] 出现意外错误 (类型=内部服务器错误,状态=500)。找不到课程的提供者 org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken
这是控制台错误消息:
2020-01-17 17:40:27.204 错误 7180 --- [ctor-http-nio-2] a.w.r.e.AbstractErrorWebExceptionHandler:[93951d85] 500 服务器错误 对于 HTTP GET "/login/oauth2/code/gateway?code=n35lEN&state=fZ94ZsZySnUwaG1vS32cX4sXU9KJ6aRm58twQMrR9sQ%3D"
java.lang.IllegalStateException:找不到类的提供者 org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticationToken 在 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] 被禁止: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:错误有 在以下站点观察到:|_ 检查点⇢ org.springframework.security.oauth2.client.web.server.authentication.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 [DefaultWebFilterChain] |_ 检查点 ⇢ org.springframework.security.web.server.header.HttpHeaderWriterWebFilter [DefaultWebFilterChain] |_ 检查点 ⇢ org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain] |_ 检查点 ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain] |_ 检查点 ⇢ HTTP GET "/login/oauth2/code/gateway?code=n35lEN&state=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] 在 reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:44) ~[reactor-core-3.3.1.RELEASE.jar:3.3.1.RELEASE] 在 reactor.core.publisher.Mono.subscribe(Mono.java:4105) ~[reactor-core-3.3.1.RELEASE.jar:3.3.1.RELEASE] 在 reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:75) ~[reactor-core-3.3.1.RELEASE.jar:3.3.1.RELEASE]
编辑:缩短以了解问题。
【问题讨论】:
【参考方案1】:这个问题发布已经有一段时间了。但是,您有可能在没有相应 jose 客户端的情况下导入 spring security oauth2 客户端。
所以你最好添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
【讨论】:
救命。人们不应该混淆spring-boot-starter-oauth2-client
和spring-security-oauth2-client
,一个工作正常,另一个需要更多配置。【参考方案2】:
就我而言,因为我的客户没有openid
范围。
【讨论】:
以上是关于没有找到类 org.springframework.security.oauth2.client.authentication.OAuth2AuthorizationCodeAuthenticatio的主要内容,如果未能解决你的问题,请参考以下文章
原因:没有为 org.springframework.security.authentication.UsernamePasswordAuthenticationToken 找到 Authentica
org.springframework.web.servlet.PageNotFound - 没有为带有 URI 的 HTTP 请求找到映射
没有为依赖找到 [org.springframework.security.config.annotation.web.builders.HttpSecurity] 类型的合格 bean
没有可用的“org.springframework.batch.core.Job”类型的合格 bean:预期单个匹配 bean,但找到了 2:
没有找到能够从 [java.lang.String] 类型转换为 [org.springframework.data.solr.core.geo.Point] 类型的转换器
java.lang.NoClassDefFoundError: org/springframework/web/context/WebApplicationContext