我最近将项目从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=
1条答案
按热度按时间3npbholx1#
最后,我可以通过执行spring security issue来解决这个问题。
我添加了如下的豆子
现在,我甚至不需要将
{baseUrl}
拆分为更精细的变量。