基于Azure AD同SSO注册实现Spring Boot后端服务安全认证问询
嘿,我来帮你搞定用同一Azure AD SSO注册信息保护Spring Boot后端的事儿!结合你已经配置的内容,咱们一步步把剩下的环节补全,确保前后端能无缝共用SSO:
1. 补全application.properties的Azure AD配置
你已经填了部分属性,还需要补充关键的租户ID,以及调整可能不完整的OAuth2配置项(注意旧的security.oauth2前缀已经被Azure官方starter替代,推荐用最新的配置):
# 你已有的配置 azure.activedirectory.clientId="xyz" azure.activedirectory.clientSecret="123" azure.activedirectory.active-directory-groups="groupname" # 需要补充的核心配置 azure.activedirectory.tenant-id="你的Azure AD租户ID" # 可从Azure Portal的租户概览获取 azure.activedirectory.redirect-uri="http://localhost:8080/login/oauth2/code/azure" # 后端默认OAuth2回调地址,要和Azure应用注册里的重定向URI一致
2. 引入正确的Azure AD Starter依赖
确保你的pom.xml(Maven)里包含官方的Spring Boot Azure AD依赖,这会帮你自动处理大部分SSO逻辑:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>azure-spring-boot-starter-active-directory</artifactId> <version>4.14.0</version> <!-- 建议使用Maven中央仓库的最新稳定版 --> </dependency>
3. 配置后端安全过滤链
根据你的Spring Boot版本,编写对应的安全配置类,让后端启用Azure AD的SSO验证:
如果你用Spring Boot 3.x(推荐)
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.web.SecurityFilterChain; import com.azure.spring.cloud.autoconfigure.aad.AadWebApplicationHttpSecurityConfigurer; @Configuration public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .anyRequest().authenticated() // 所有请求都需要认证 ) .apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication()); // 启用Azure AD SSO配置 return http.build(); } }
如果你用Spring Boot 2.x
import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import com.azure.spring.cloud.autoconfigure.aad.AadWebApplicationHttpSecurityConfigurer; @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { super.configure(http); // 启用Azure AD SSO http.apply(AadWebApplicationHttpSecurityConfigurer.aadWebApplication()) .and() .authorizeRequests() .anyRequest().authenticated(); } }
4. 关联前端的Azure AD注册信息
因为你要复用同一SSO注册,需要确保Azure Portal里的应用注册配置正确:
- 在应用注册的重定向URI里,同时添加前端的回调地址(比如
http://localhost:3000/callback)和后端的回调地址(就是你配置的redirect-uri) - 如果前端和后端用的是同一个应用注册ID(clientId),直接用你已有的配置即可;如果是不同应用注册,需要在后端的应用注册里添加对前端应用的API权限,允许前端调用后端接口
5. 配置组权限校验(可选)
你已经指定了active-directory-groups,可以在安全配置里限制只有指定组的用户能访问后端:
修改SecurityConfig里的授权规则,添加组权限校验:
.authorizeHttpRequests(auth -> auth .anyRequest().hasAuthority("ROLE_" + "groupname") // Azure AD组会自动映射为ROLE_前缀的权限 )
6. 验证后端SSO是否生效
启动后端服务后,访问任何接口(比如http://localhost:8080/api/user),会自动跳转到Azure AD的登录页面,登录后就能获取用户信息:
你可以写一个简单的控制器来测试:
import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.oauth2.core.oidc.user.OidcUser; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @GetMapping("/api/user") public OidcUser getUserInfo(@AuthenticationPrincipal OidcUser user) { return user; // 返回当前登录用户的Azure AD信息 } }
内容的提问来源于stack exchange,提问作者bindu
相关产品推荐
相关产品推荐

