最近,我将项目升级为SpringBoot 2.6.6
,从2.1.3.RELEASE
(后者反过来将spring安全性从5.1.4版本升级到5.6.2)。在我的项目中,我有authorization-code
流,它对来自IDM的代码和令牌请求都使用重定向-uri。我注意到,令牌请求中使用的redirect-uri
与最初用于授权代码请求的不同。唯一的区别是它将https
替换为http
。
由于重定向URI中的不匹配,HTTP 400错误导致令牌请求失败。它在使用旧版本的spring /security时运行得很好。
另外,作为迁移到SpringBoot 2.6.6的一部分,我们被迫使用属性spring.security.oauth2.client.registration.foo.redirect-uri
而不是spring.security.oauth2.client.registration.foo.redirect-uri-template
,因为它已经过时了。
我配置了重定向-uri属性,如下所示
spring.security.oauth2.client.registration.foo.redirect-uri={baseUrl}/login/oauth2/code/foo
但是,如果我将值更改为https://{baseHost}{basePort}{basePath}/login/oauth2/code/foo
,它就能够获得令牌,并且在登录过程中没有问题。
你知道为什么它把这个方案改为http来交换令牌请求以换取授权代码吗?除了指定baseScheme
之外,还有其他方法来使用https来设置它吗?
编辑:提供程序配置
foo.base.url=https://fooauth.acme.com
spring.security.oauth2.client.provider.foo.authorization-uri=${foo.base.url}/v1/oauth/authorize
spring.security.oauth2.client.provider.foo.token-uri=${foo.base.url}/v1/oauth/token
spring.security.oauth2.client.provider.foo.user-info-uri=${foo.base.url}/v1/users/info
spring.security.oauth2.client.provider.foo.user-name-attribute=userName
spring.security.oauth2.client.provider.foo.logout-uri=${foo.base.url}/v1/oauth/logout?post_logout_redirect_uri=
发布于 2022-07-08 10:51:48
最后,我可以通过遵循这个春季安全问题来解决这个问题。在这个答案中也有同样的描述。
我添加的bean如下所示
@Bean
FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() {
final FilterRegistrationBean<ForwardedHeaderFilter> filterRegistrationBean = new FilterRegistrationBean<ForwardedHeaderFilter>();
filterRegistrationBean.setFilter(new ForwardedHeaderFilter());
filterRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return filterRegistrationBean;
}
现在,我甚至不需要将{baseUrl}
拆分成更精细的变量。
https://stackoverflow.com/questions/72444956
复制相似问题