Spring Boot集成Azure AD身份认证(无门户权限)实现咨询
无需Azure AD门户的Spring Boot身份验证实现方案
核心思路
因为无法访问Azure AD门户,只需向公司AD管理员索要必要的应用注册参数,基于Spring Security OAuth2 Client快速集成微软登录,通过登录结果验证用户是否属于公司Azure AD。
步骤1:向管理员获取以下参数
必须拿到这几个核心配置项(管理员在Azure门户中注册应用后即可提供):
client-id:Azure AD中为你的Spring Boot应用分配的唯一IDclient-secret:应用的密钥(机密客户端必填)tenant-id:公司Azure AD的租户ID- 已在门户中配置好的回调地址(redirect-uri),比如
http://localhost:8080/login/oauth2/code/azure
步骤2:添加Spring Security OAuth2依赖
在pom.xml(Maven)中引入OAuth2客户端 starter:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency>
步骤3:配置应用参数
在application.yml中填入管理员提供的参数(建议用环境变量避免硬编码):
spring: security: oauth2: client: registration: azure: client-id: ${AZURE_CLIENT_ID} client-secret: ${AZURE_CLIENT_SECRET} scope: openid,profile,email redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}" client-name: 公司微软登录 provider: azure: authorization-uri: https://login.microsoftonline.com/${AZURE_TENANT_ID}/oauth2/v2.0/authorize token-uri: https://login.microsoftonline.com/${AZURE_TENANT_ID}/oauth2/v2.0/token user-info-uri: https://graph.microsoft.com/oidc/userinfo jwk-set-uri: https://login.microsoftonline.com/${AZURE_TENANT_ID}/discovery/v2.0/keys user-name-attribute: name
步骤4:配置Spring Security规则
创建SecurityConfig类,强制所有请求需要认证,并重定向到微软登录页:
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.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) .oauth2Login(oauth2 -> oauth2.defaultSuccessUrl("/login-success", true)); return http.build(); } }
步骤5:验证登录状态
创建一个简单的控制器,在登录成功后返回用户信息,确认登录结果:
import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.oauth2.core.user.OAuth2User; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class AuthController { @GetMapping("/login-success") public String confirmLogin(@AuthenticationPrincipal OAuth2User oauth2User) { String userName = oauth2User.getAttribute("name"); String userEmail = oauth2User.getAttribute("email"); return String.format("登录验证成功!\n用户姓名:%s\n邮箱:%s", userName, userEmail); } }
验证逻辑说明
启动应用后,访问任意页面会自动跳转到公司微软登录界面:
- 如果是Azure AD内的合法用户,输入公司账号密码后会成功跳转至
/login-success页面,显示用户信息,说明验证通过。 - 如果用户不在公司AD中,微软登录页会直接提示账号不存在或无权限,无需额外判断。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

