如何使用Azure Active Directory SSO结合SAML 2.0保护API
借助Azure AD SAML 2.0 SSO防护API的实操方案
SAML 2.0主要解决用户身份认证问题,而API安全防护需要结合令牌验证逻辑。下面是基于Azure AD的完整落地流程:
一、Azure AD端的核心配置
1. 注册两个应用实体
你需要在Azure AD中创建两个独立的应用注册:
- SAML客户端应用:用户用来登录的前端/桌面/中间层应用,负责处理SAML认证流程。
- 受保护的API应用:你要防护的API服务,用来定义权限范围并验证请求令牌。
2. 配置SAML客户端应用的单点登录
- 进入Azure AD的「企业应用」,创建非库应用,切换到「单点登录」→「SAML」配置页:
- 设置标识符(Entity ID)和回复URL(ACS URL)(即客户端接收SAML响应的地址)。
- 下载Azure AD的SAML元数据文件(后续客户端验证签名会用到)。
- 给这个客户端应用分配需要访问API的用户或安全组。
3. 为API应用配置权限范围
- 打开API应用的「公开API」页面,添加自定义权限(比如命名为
access_core_api),权限类型选「委派」(用于用户上下文访问)或「应用程序」(用于服务间无用户场景调用)。 - 回到SAML客户端应用的「API权限」页面,添加刚才API应用的权限,记得点击「授予管理员同意」(否则普通用户无法获取对应权限)。
二、客户端应用:SAML登录+获取API访问令牌
客户端需要先完成SAML认证,再拿到Azure AD的OAuth2访问令牌才能合法调用API:
1. 实现SAML 2.0认证流程
用对应语言的成熟SAML库处理认证逻辑:
- 向Azure AD的SAML端点发送AuthnRequest请求。
- 接收Azure AD返回的SAML响应,用元数据里的公钥验证签名,提取用户身份信息。
- 常用库:.NET用
Microsoft.Identity.Web.Saml,Java用OpenSAML,Python用pysaml2。
2. 转换为API访问令牌
完成SAML登录后,客户端需要获取访问令牌:
- 如果是用户上下文访问,用授权码流或者on-behalf-of流程(中间层应用场景)。
- .NET代码示例:
// 已完成SAML登录,获取用户的API访问令牌 var scopes = new[] { "api://<你的API应用ClientID>/access_core_api" }; var tokenAcquisition = serviceProvider.GetRequiredService<ITokenAcquisition>(); var accessToken = await tokenAcquisition.GetAccessTokenForUserAsync(scopes); - 调用API时,把令牌放在请求头:
Authorization: Bearer {accessToken}
三、API端:令牌验证与授权
API需要验证客户端传来的访问令牌,确保请求合法:
1. 集成Azure AD令牌验证库
用官方库快速实现验证逻辑:
- .NET Core API:直接用
Microsoft.Identity.Web// Program.cs中配置验证服务 builder.Services.AddMicrosoftIdentityWebApiAuthentication(builder.Configuration) .AddInMemoryTokenCaches(); - Python API:用
msal库手动验证令牌的签名、受众和核心声明。
2. 保护API端点
在需要防护的控制器或方法上添加[Authorize]属性,自动拦截未授权请求。如果需要细粒度权限控制,还可以检查令牌中的scp(委派权限)或roles(应用权限)声明:
[Authorize(Roles = "ApiAdmin")] [HttpGet("/admin/data")] public IActionResult GetAdminData() { // 仅拥有ApiAdmin角色的用户可访问此端点 return Ok("Admin exclusive data"); }
四、强化安全的额外措施
- 条件访问策略:在Azure AD中配置,比如要求MFA、限制IP范围、设备合规,只有符合条件的用户才能获取访问令牌。
- 最小权限原则:客户端只请求必要的API权限,API根据令牌中的权限声明限制访问范围。
- 严格SAML验证:客户端必须验证SAML响应的签名、issuer、受众、过期时间,防止伪造的认证响应。
- 令牌生命周期管理:设置合理的令牌过期时间,客户端实现自动刷新逻辑,避免频繁重新登录。
- 日志与监控:开启Azure AD日志和API访问日志,及时发现异常请求或认证行为。
内容的提问来源于stack exchange,提问作者Zahra Shahid
相关产品推荐
相关产品推荐

