开发者社区> 问答> 正文

Spring Boot-设置默认的HTTP Oauth2Login()注册/提供者

Spring Boot的新手,我正在开发一个应用程序,该应用程序已经完成了一些Oauth2身份验证以使用Azure进行登录。我的任务是为另一个API设置身份验证,现在我有两个注册(客户端ID /秘密/授权类型)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登录应用程序,以便不提示用户。

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())
        ;

问题来源:Stack Overflow

展开
收起
montos 2020-03-26 21:49:03 4899 0
1 条回答
写回答
取消 提交回答
  • 默认情况下,Spring Security显示选择器页面,但是您可以像Spring Security提供的任何其他登录页面一样自定义此页面。

    实际上,预计大多数人都将创建自己的登录页面。该选择器页面是开始时有用的默认设置。

    创建自己的登录页面需要两个步骤。

    首先,让Spring Security知道您正在创建自己的登录页面:

    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) {
            http
                .authorizeRequests()
                    .mvcMatchers("/login").permitAll() // here
                    .anyRequest().authenticated()
                    .and()
                .oauth2Login()
                    .loginPage("/login") // and here
                    .and()
                // ... other configs
        }
    
    }
    

    其次,创建登录页面。在这种情况下,它将重定向到azure客户端端点,如下所示:

    @Controller
    public class LoginController {
        @GetMapping("/login")
        public String login() {
            return "redirect:/oauth2/authorization/azure";
        }
    }
    

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

    关于此设置的好处是,它使您有足够的能力来决定如何使用户登录的请求时间。

    回答来源:Stack Overflow

    2020-03-26 21:49:40
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
workshop专场-微服务专场-开发者动手实践营-微服务-Spring Cloud Alibaba 微服务全家桶体验 立即下载
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
CDN助力企业网站进入HTTPS时代 立即下载