Spring自定义集中式授权服务器(oauth)-身份验证和自定义错误

时间:2018-11-20 20:07:57

标签: spring spring-security spring-security-oauth2

我对Spring和OAuth都很满意,这使我很难解决这个令人困扰的问题!

根据我的收集,我需要做的是使用oauth和开放ID创建集中式授权服务器。

我们有一个中央用户数据库,我们希望所有应用程序都调用授权服务器,登录,自动批准(因为唯一的流量应该来自我们的服务器),并根据它们的URI重定向它们通过。

理想情况下,我们会给他们授权令牌和ID令牌(开放ID),以便他们掌握有关登录用户的信息。

因此,我正在设置一个Spring Boot应用程序,该应用程序仅充当授权服务器。到目前为止,我看到了登录页面-但是每次登录尝试都以以下错误结束:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

到目前为止,这是我要用于该服务器的内容:

SpringBootServletInitializer(应用程序初始化程序)-com.company

@SpringBootApplication
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

AuthorizationServerConfigurerAdapter(身份验证服务器)-com.company.config

@Configuration
@EnableAuthorizationServer
public class AuthorizationServer extends AuthorizationServerConfigurerAdapter {

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
            .withClient("my_client")
                .secret("my_secret")
                .autoApprove(true)
                .authorizedGrantTypes("authorization_code", "refresh_token", "password") 
                .scopes("openid")
                .accessTokenValiditySeconds(600);
    }
}

WebSecurityConfigurerAdapter(安全性)-com.company.config

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    @Autowired
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()

            .withUser("user").password("password")
            .roles("USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .formLogin()

            .and()

            .httpBasic().disable()
            .anonymous().disable()
            .authorizeRequests().anyRequest().authenticated();

        // disabled basic auth and configured to use dafault Spring Security form login.
    }
}

那么问题:

  1. 那是什么错误,为什么我会看到它?
  2. 如何自定义所看到的登录页面?我拼命地在Spring文档中四处逛逛,迷路了/不知所措。在我拥有的属性文件之外的资源文件夹中没有任何内容。

1 个答案:

答案 0 :(得分:1)

错误是由于从春天开始就可以映射到错误页面,这是因为存在异常。

您可以指定自己的登录页面,如下所示:

       .formLogin()
          .loginPage("/login.html") //your custom login page
          .defaultSuccessUrl("/homepage.html", true) //welcome page after login success
          .failureUrl("/login.html?error=true") // when AccessDenied happens