Oauth 2.0 弹簧靴&x2B;具有自定义提供程序的安全OAuth2.0客户端

Oauth 2.0 弹簧靴&x2B;具有自定义提供程序的安全OAuth2.0客户端,oauth-2.0,spring-security-oauth2,spring-oauth2,oauth2client,Oauth 2.0,Spring Security Oauth2,Spring Oauth2,Oauth2client,我正在为Spring Boot+Security(版本5)应用程序中的自定义OAuth2提供程序创建OAuth2.0客户端 下面是应用程序.properties,它具有所有配置,并且在我的项目中没有其他配置类 spring.security.oauth2.client.registration.xxxxxxxxx.client-id=XXXXXXXXXX spring.security.oauth2.client.registration.xxxxxxxxx.client-secret=XXXX

我正在为Spring Boot+Security(版本5)应用程序中的自定义OAuth2提供程序创建OAuth2.0客户端

下面是
应用程序.properties
,它具有所有配置,并且在我的项目中没有其他配置类

spring.security.oauth2.client.registration.xxxxxxxxx.client-id=XXXXXXXXXX
spring.security.oauth2.client.registration.xxxxxxxxx.client-secret=XXXXXXXXXX
spring.security.oauth2.client.registration.xxxxxxxxx.scope=openid
spring.security.oauth2.client.registration.xxxxxxxxx.redirect-uri-template=http://localhost:8080/login/oauth2/code/xxxxxxxxx
spring.security.oauth2.client.registration.xxxxxxxxx.client-name=xxxxxxxxx
spring.security.oauth2.client.registration.xxxxxxxxx.provider=xxxxxxxxx
spring.security.oauth2.client.registration.xxxxxxxxx.client-authentication-method=basic
spring.security.oauth2.client.registration.xxxxxxxxx.authorization-grant-type=authorization_code

spring.security.oauth2.client.provider.xxxxxxxxx.authorization-uri=https://api.xxxxxxxxx.com/authorize
spring.security.oauth2.client.provider.xxxxxxxxx.token-uri=https://api.xxxxxxxxx.com/token
spring.security.oauth2.client.provider.xxxxxxxxx.user-info-uri=https://api.xxxxxxxxx.com/userinfo?schema=openid
spring.security.oauth2.client.provider.xxxxxxxxx.user-name-attribute=name
spring.security.oauth2.client.provider.xxxxxxxxx.user-info-authentication-method=header
当我点击
http://localhost:8080/
它会正确重定向到提供商的登录页面,成功登录后会重定向回我的应用程序

现在的问题是,当它重定向时,会显示下面的错误消息。

我在谷歌上搜索了这个错误,但没有得到任何正确的答案。而且,OAuth2提供程序没有共享这样的URL

经过研究,我知道我需要设置以下属性。应该由身份验证提供商提供吗?
spring.security.oauth2.client.provider.pepstores.jwk集uri


在配置中我到底缺少什么?

当您在客户端应用程序中收到JWT时,您需要验证JWT的签名。要验证签名,您需要身份验证提供程序的公钥。根据OAuth规范,身份验证提供者可以通过URI公开公钥,客户端可以使用此URI获取公钥以验证JWT。这就是您的配置中缺少的内容。

最后,问题解决了。我只需要配置JWKURI,它应该由身份验证提供程序提供。 下面是客户身份验证提供程序的最终配置

spring.security.oauth2.client.registration.xxxxxxxxx.client-id=XXXXXXXXXX
spring.security.oauth2.client.registration.xxxxxxxxx.client-secret=XXXXXXXXXX
spring.security.oauth2.client.registration.xxxxxxxxx.scope=openid
spring.security.oauth2.client.registration.xxxxxxxxx.redirect-uri-template=http://localhost:8080/login/oauth2/code/xxxxxxxxx
spring.security.oauth2.client.registration.xxxxxxxxx.client-name=xxxxxxxxx
spring.security.oauth2.client.registration.xxxxxxxxx.provider=xxxxxxxxx
spring.security.oauth2.client.registration.xxxxxxxxx.client-authentication-method=basic
spring.security.oauth2.client.registration.xxxxxxxxx.authorization-grant-type=authorization_code

spring.security.oauth2.client.provider.xxxxxxxxx.authorization-uri=https://api.xxxxxxxxx.com/authorize
spring.security.oauth2.client.provider.xxxxxxxxx.token-uri=https://api.xxxxxxxxx.com/token
spring.security.oauth2.client.provider.xxxxxxxxx.user-info-uri=https://api.xxxxxxxxx.com/userinfo?schema=openid
spring.security.oauth2.client.provider.xxxxxxxxx.user-name-attribute=name
spring.security.oauth2.client.provider.xxxxxxxxx.user-info-authentication-method=header
spring.security.oauth2.client.provider.xxxxxxxxx.jwk-set-uri=https://api.xxxxxxxxx.com/jwks
谢谢