首页 > 解决方案 > Spring Boot - 设置默认 HTTP Oauth2Login() 注册/提供者

问题描述

Spring Boot 的新手,我正在开发一个已经完成一些 Oauth2 身份验证以使用 azure 登录的应用程序。我的任务是为另一个 API 设置一些身份验证,现在我的application-local.properties.

spring.security.oauth2.resource.jwk.key-set-uri=xxxxxxxx
spring.security.oauth2.client.registration.azure.client-secret=xxxx
spring.security.auth2.client.registration.azure.client-id=xxxxx
spring.security.oauth2.client.registration.azure.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.azure.client-name=azure
spring.security.oauth2.client.registration.azure.provider=azure
spring.security.oauth2.client.registration.azure.scope=openid,profile,email,offline_access

spring.security.oauth2.client.provider.test.token-uri=xxxxx
spring.security.oauth2.client.registration.test.client-id=xxxxx
spring.security.oauth2.client.registration.test.client-secret=xxxxx
spring.security.oauth2.client.registration.test.authorization-grant-type=client_credentials

登录提示示例

登录提示示例

这行得通。现在的问题是,第一次访问应用程序时,系统会提示您选择要登录的服务,Azure 或 test。我希望能够为此设置默认值并使用 azure 登录应用程序,这样就不会提示用户。

        http.authorizeRequests()
                .antMatchers("/impersonate/**").hasAnyRole(roleAdmin)
                .antMatchers("/login", "/health").permitAll()
                .anyRequest().authenticated()
                .antMatchers("/logout").hasRole(prevRoleAdmin)
                .anyRequest().fullyAuthenticated()
                .and()
                .csrf().disable()
                .logout()
                .logoutSuccessUrl("/admin")
                .and()

                .oauth2Login() // Is there a way to pass which registration it should use after this?

                .userInfoEndpoint()
                .oidcUserService(this.oidcUserService())
        ;

有没有办法设置它来寻找和使用天蓝色的信用?

标签: javaspring-bootspring-securityoauth-2.0

解决方案


默认情况下,Spring Security 显示选择器页面,但您可以将登录页面设置为特定客户端:

@Configuration
public class RedirectToAzureConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) {
        http
            // ... 
            .oauth2Login(oauth2 -> oauth2
                .loginPage("/oauth2/authorization/azure")
            );
    }

}

对于您列出的每个客户端application.properties,Spring Security 都会响应/oauth2/authorization/{registrationId}请求并与相应的授权服务器协商以使用户登录。

如果您需要以编程方式决定重定向到什么,您可以注册一个AuthenticationEntryPoint而不是设置loginPage().


推荐阅读