Spring Security OAuth2登录重定向到错误页面,尽管成功

时间:2018-04-05 15:07:54

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

至于不透露机密信息,提供者将被$PROVIDER替换。

授权有效,但不是将我重定向到索引,而是将我重定向到/error

重现的步骤

  1. 启动应用程序
  2. 转到任何页面,它会将我重定向到显示链接http://localhost/oauth_login的{​​{1}}。
  3. 点击链接login(链接到login
  4. 重定向到http://localhost/oauth2/authorization/$PROVIDER
  5. 错误页面显示以下内容(我将其格式化以便于阅读):

    http://localhost/error

    这显然与默认的 Whitelabel错误页面上显示的参数相同,所以实际上唯一的问题是它在JSON中除了是HTML页面之外。如果我之后刷新{ "timestamp":"2018-04-05T14:18:47.720+0000", "status":999, "error":"None", "message":"No message available" } ,它会显示正常的 Whitelabel错误页面

    现在这就变得很奇怪,如果我在重定向到错误页面后尝试导航到http://localhost/error,我就会被验证(用户数据在那里,所以授权成功)。基本上,问题是我被重定向到http://localhost/而不是http://localhost/error

    因为它功能齐全(除了重定向),我不会发布整个安全配置,但我会将其限制为相关代码:

    SecurityConfiguration

    http://localhost/

    相关属性

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .csrf().disable()
                .authorizeRequests().anyRequest()
                    .authenticated()
                .and()
                    .oauth2Login()
                .loginPage("/oauth_login")
                    .defaultSuccessUrl("/")
                    .failureUrl("/oauth_login")
                    .permitAll()
                .and()
                    .logout()
                        .logoutUrl("/logout")
                        .logoutSuccessUrl("/oauth_login").permitAll()
        ;
    }
    

    相关信息

    • 一旦我在网站上进行了身份验证,我就可以浏览,刷新页面,做任何我想做的事情(直到我退出)。

    TL; DR 授权有效但重定向到spring.security.oauth2.client.registration.$PROVIDER.redirectUriTemplate=http://localhost/login/oauth2/code/$PROVIDER 而不是/error

1 个答案:

答案 0 :(得分:1)

我实际上找到了我自己的问题的答案,但我决定发布它,以防有人遇到同样的问题。

/

应该是

.defaultSuccessUrl("/")

如果您未将其设置为.defaultSuccessUrl("/", true) ,它会自动将用户重定向到上一个上一个请求,在我的情况下,最后一个请求是针对网址true,这解释了我的问题。

通过将其设置为/error,您可以强制用户重定向到您的true

通过查看日志,您实际上可以看到它:

defaultSuccessUrl
相关问题