java - Spring Boot - 设置默认 HTTP Oauth2Login() 注册/提供程序

标签 java spring-boot spring-security oauth-2.0

Spring Boot 新手,我正在开发一个应用程序,该应用程序已经完成了一些 Oauth2 身份验证以使用 azure 登录。我的任务是为另一个 API 设置一些身份验证,现在我的 application-local.properties 中有两个注册(客户端 id/secret/grant-type)。

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

登录提示示例

example of login prompt

这有效。现在的问题是,当第一次访问该应用程序时,系统会提示您选择要登录的服务,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())
        ;

有什么方法可以设置它来寻找并使用天蓝色的信用吗?

最佳答案

默认情况下,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()

关于java - Spring Boot - 设置默认 HTTP Oauth2Login() 注册/提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60674060/

相关文章:

spring-boot - 使用 Spring Data 原生查询时,位置 [1] 的参数不存在错误

java - 如何在 Spring Boot 中使用 KeyHolder?

spring-mvc - Spring Security - 无需密码的编程登录

java - 带有表单登录的 Spring Security OAuth 2

java - 探测 VisualVM 中的单个类

java - 是否可以使用 iText 以弧形书写文本

java - 可以假设 Java Concurrent Mark Sweep Garbage Collector 在 Linux 和 Mac 以及 Windows 上同样出色吗?

java - Tomcat不一致+设置路径不确定

java - 如何在kafka springboot中从一个主题读取多种类型的json

spring-security - Spring Security java config - 为什么选项顺序很重要?