具有自定义提供程序的Spring Boot + Security OAuth2.0客户端

时间:2019-05-09 12:18:23

标签: oauth-2.0 spring-security-oauth2 spring-oauth2 oauth2client

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

下面是application.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/时,它将正确重定向到提供程序的登录页面,成功登录后,它将重定向回到我的应用程序。

现在的问题是当它重定向时,它显示以下错误消息。 enter image description here

我已经用Google搜索了此错误,但没有得到任何正确的答案。另外,OAuth2提供者也没有共享这样的URL。

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

最后,问题解决了。我只需要配置Auth提供者应提供的jwk URI。 在客户身份验证提供者的最终配置下方。

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

谢谢