You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:47:29