java - 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())
;
有没有办法设置它来寻找和使用天蓝色的信用?
解决方案
默认情况下,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()
.
推荐阅读
- javascript - 智能锁屏不适用于移动触摸(javascript 和 jquery)
- reactjs - 在 typescript(sharepoint 现代 ui)项目中使用 webpack 魔术注释
- java - 使用 PDFBOX PreflightParser for PDDocument 验证 PDF
- php - 如何比较 int 和时间戳列(Laravel 雄辩)?
- c# - 无法将文件“<>.mdf”附加为数据库“<>”
- node.js - 无法 dockerize node.js 应用程序
- php - 如何让另一种语言在注册和身份验证页面上工作?
- android - 如何将搜索视图与回收器视图和 sqlite 一起使用?
- java - 范围报告在 Cucumber 4.7.1 中不起作用
- mysql - 如何从 Mysql 日期格式 DD/MM/YYYY 中获取时间?