oauth-2.0 springboot升级到2.6.6后,Spring安全性oauth2重定向URI未使用https

mpgws1up  于 2022-10-31  发布在  Spring
关注(0)|答案(1)|浏览(177)

我最近将项目从2.1.3.RELEASE升级到了SpringBoot 2.6.6(这反过来又将Spring Security从5.1.4-Release升级到了5.6.2)。在我的项目中,我有authorization-code流,它对来自IDM的代码和令牌请求都使用redirect-uri。我注意到,令牌请求中使用的redirect-uri与最初用于授权码请求的redirect-uri不同。唯一的区别是它将https替换为http
令牌请求失败,出现HTTP 400错误,原因是重定向URI不匹配。它与旧版本的spring Boot /security配合使用时工作正常。
此外,作为迁移到SpringBoot 2.6.6的一部分,我们被迫使用spring.security.oauth2.client.registration.foo.redirect-uri属性,而不是spring.security.oauth2.client.registration.foo.redirect-uri-template,因为它已被弃用。
我已经配置了如下的redirect-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=
3npbholx

3npbholx1#

最后,我可以通过执行spring security issue来解决这个问题。
我添加了如下的豆子

@Bean
FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() {
    final FilterRegistrationBean<ForwardedHeaderFilter> filterRegistrationBean = new FilterRegistrationBean<ForwardedHeaderFilter>();
    filterRegistrationBean.setFilter(new ForwardedHeaderFilter());
    filterRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);

    return filterRegistrationBean;
}

现在,我甚至不需要将{baseUrl}拆分为更精细的变量。

相关问题