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
默认情况下,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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。