如何同步Azure AD用户至后端数据库以实现授权管理
将Azure AD用户同步到后端数据库的最佳方案
针对你需要同步Azure AD用户到后端数据库、并支持前端展示全量用户列表分配权限的场景,以下是几种实用的同步方案:
1. Microsoft Graph API定期增量同步
这是最通用的方案,适合绝大多数场景:
- 操作步骤:
- 在Azure AD中注册一个后端专用的应用程序,申请
User.Read.All的应用权限(而非委托权限,确保后台能访问全量用户) - 用客户端凭据流获取Graph API的访问令牌,无需用户参与即可调用接口
- 编写定时任务(比如用Hangfire、Quartz.NET,或者Azure Functions定时触发),调用Graph API的
/users/delta接口做增量同步——这个接口只会返回上次同步后有变化的用户(新增、更新、删除) - 对比后端
User表的现有数据,执行新增、更新、标记删除操作,确保数据一致
- 在Azure AD中注册一个后端专用的应用程序,申请
- 优势:实现简单,可控性强,能保证数据库有全量用户数据,增量查询还能减少资源消耗
- 注意事项:处理Graph API的分页逻辑,确保拉取到所有用户;给同步任务加日志和异常重试机制,避免数据遗漏
2. Azure AD事件驱动实时同步
如果需要用户数据实时更新,可以用Azure AD的事件通知机制:
- 操作步骤:
- 在Azure AD门户配置事件订阅,选择用户创建、更新、删除的事件类型
- 后端暴露一个可公网访问的Webhook端点,验证Azure AD的通知签名确保安全
- 收到事件通知后,调用Graph API获取完整用户信息,即时更新后端
User表
- 优势:无延迟,实时同步用户变化
- 注意事项:要处理通知重复、丢失的情况,接口需做幂等性校验;如果后端在私有网络,可配置Azure Event Grid私有端点
3. 用户首次登录时自动同步
如果只需要同步实际使用系统的用户,可采用这种懒加载方式:
- 操作步骤:
- 用户通过MSAL登录SPA后,后端验证访问令牌时,提取令牌中的用户唯一标识(如
oid) - 检查
User表是否存在该用户,若不存在则调用Graph API的/me接口(用用户的访问令牌,需SPA申请User.Read委托权限)获取用户详情,插入User表
- 用户通过MSAL登录SPA后,后端验证访问令牌时,提取令牌中的用户唯一标识(如
- 优势:无需后台定时任务,仅同步活跃用户
- 注意事项:无法同步未登录过系统的Azure AD用户,不满足你需要展示全量用户列表的需求,仅作为补充方案
推荐方案
结合你需要展示全量用户列表的需求,优先选择Microsoft Graph API定期增量同步。它既能保证数据库中有完整的Azure AD用户数据,又能通过增量查询降低同步成本,实现起来也相对简单。
内容的提问来源于stack exchange,提问作者Tom el Safadi
相关产品推荐
相关产品推荐

