我正在努力将使用OAuth和自定义授权服务器的应用程序从Spring Boot 1.5升级到Spring Boot 2。
使用身份验证服务器并在其春季启动1.5设置中,OAuth流程运行正常。但是,在迁移到Spring Boot 2(当前为2.1.3)之后。
我在身份验证服务器和客户端应用程序之间获得了无限重定向。重定向过程如下:
http://localhost:8080/
http://localhost:8080/login
https://auth.example.com/oauth/authorize?...
http://localhost:8080/login?code=[code1]&state=[state]
http://localhost:8080/login
https://auth.example.com/oauth/authorize?...
http://localhost:8080/login?code=[code1]&state=[state]
http://localhost:8080/login
https://auth.example.com/oauth/authorize?...
http://localhost:8080/login?code=[code1]&state=[state]
http://localhost:8080/login
https://auth.example.com/oauth/authorize?...
http://localhost:8080/login?code=[code1]&state=[state]
...
如您所见,一旦身份验证服务器使用查询字符串上的身份验证代码重定向回登录名,客户端应用程序便会重定向回到/login
,从而重新启动整个过程,然后无限重定向,直到浏览器叫停它。
我将应用程序剥离了,这是我的配置:
Applicaiton.java
@SpringBootApplication
public class Application
{
public static void main( String[] args )
{
SpringApplication.run( AdminApplication.class, args );
}
}
SecurityConfig.java
@Configuration
@EnableOAuth2Sso
public class SecurityConfig extends WebSecurityConfigurerAdapter
{
@Override
protected void configure( HttpSecurity http ) throws Exception
{
http.antMatcher( "/**" )
.authorizeRequests()
.antMatchers( "/assets/**", "/app/**", "/login*" ).permitAll()
.anyRequest().authenticated();
}
}
application.yml
security:
oauth2:
client:
clientId: xxxxxx
clientSecret: xxxxx
accessTokenUri: https://auth.example.com/oauth/token
userAuthorizationUri: https://auth.example.com/oauth/authorize
resource:
userInfoUri: https://auth.example.com/user
答案 0 :(得分:1)
我找到了解决问题的方法,事实证明,Spring Boot 2在请求访问令牌时似乎没有默认使用Authorization
标头,添加了以下配置属性即可解决问题
security:
oauth2:
client:
authenticationScheme: header