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

Spring Boot转REST服务+Angular前端的Azure认证集成策略咨询

背景信息

现有一个集成Thymeleaf的Spring Boot应用,已通过O365 Azure实现用户认证,相关Maven依赖如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>azure-spring-boot-starter-active-directory</artifactId>
</dependency>

该应用已在Azure完成注册,application.properties配置如下且运行正常:

azure.activedirectory.tenant-id = xxxxxx
azure.activedirectory.client-id = xxxxxx
azure.activedirectory.client-secret = xxxxxx

目前仅通过导入org.springframework.security.oauth2.client.*及添加@SpringBootApplication、@EnableWebSecurity注解实现认证,用户访问页面前会经Azure认证,一切正常。

现需扩展功能:将原简单网页改为Angular应用,Spring Boot应用转为REST服务,咨询以下问题:

  1. 如何处理Azure认证?是否保留现有方式?
  2. 如何将认证集成到Angular应用中?
  3. 是否需要在两端都处理Azure认证,还是仅在一端集成即可?
  4. Angular的MSAL库与Spring Boot的认证如何交互?是否可各自独立处理并通过Azure实现SSO?

问题解答

1. Azure认证处理方式及原有方案调整

原有基于服务器端渲染的OAuth2授权码流程不适合当前前后端分离架构,无需完全保留。你可以保留现有Spring Boot的Azure AD依赖,但需要修改Security配置:从原来的重定向认证逻辑,改为验证前端传入的JWT令牌(ID Token/Access Token)。azure-spring-boot-starter-active-directory依然可用于令牌合法性校验、用户信息解析等工作。

2. Angular应用集成Azure认证的步骤

使用微软官方的MSAL Angular库(@azure/msal-angular)实现前端认证,核心步骤如下:

  • 安装依赖:执行 npm install @azure/msal-browser @azure/msal-angular
  • 在app.module.ts中配置MSAL模块,填入Azure AD注册的clientId、tenantId,指定认证范围(如User.Read、后端API的自定义范围)
  • 为受保护路由添加MsalGuard,拦截未登录用户的访问请求
  • 在组件中调用MSAL的登录方法(如loginPopup()或loginRedirect()),获取用户的ID Token和Access Token
  • 调用Spring Boot REST接口时,在请求头中携带 Authorization: Bearer {accessToken}

3. 两端认证的必要性

需要两端配合处理,但并非各自独立完成完整认证流程:

  • 前端:负责发起用户认证、获取并维护令牌(如存储在本地存储)、请求后端时携带令牌
  • 后端:负责验证前端传入令牌的合法性(签名、过期时间、受众、发行者等),并基于令牌中的用户信息做权限控制

仅在一端处理会存在安全隐患:比如仅前端认证,后端无法确保请求的合法性;仅后端认证,Angular前端无法实现无感知会话管理,不符合前后端分离的最佳实践。

4. MSAL与Spring Boot的交互及SSO实现

交互逻辑

Angular通过MSAL获取Azure AD颁发的Access Token,调用Spring Boot API时将该Token放在请求头中。Spring Boot利用azure-spring-boot-starter-active-directory的自动配置,完成令牌有效性验证、用户信息解析,后续你可基于解析出的信息做接口权限控制。

SSO实现

可以通过Azure AD实现SSO,无需两端各自独立处理。只要前端和后端在同一个Azure AD租户下注册,且前端获取的Access Token受众(aud)指向后端API应用(或后端配置接受前端应用的Token),用户在前端登录后,后端就能通过Token识别用户,实现统一身份认证。

具体操作需在Azure AD中:为后端REST服务注册API并定义访问范围;在前端应用注册中,添加对该API范围的权限请求。这样MSAL获取的Access Token就能被后端验证通过,实现SSO。


内容的提问来源于stack exchange,提问作者chris01

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 07:23:17