0

0

如何在Azure AD用户删除时向外部系统发送通知

霞舞

霞舞

发布时间:2025-11-21 14:41:00

|

284人浏览过

|

来源于php中文网

原创

如何在Azure AD用户删除时向外部系统发送通知

本文旨在指导您如何在azure ad中用户被删除时,向您的外部系统(如php应用)发送实时通知。我们将重点探讨两种主要方法:利用microsoft graph api的变更通知(webhooks)实现即时同步,以及理解azure ad标准用户去预配(de-provisioning)的工作机制及其对删除操作的响应时机。通过这两种策略,您可以确保外部系统中的用户状态与azure ad保持一致,从而实现更完善的用户生命周期管理。

在现代应用集成中,尤其当外部系统(如基于SAML协议集成的PHP应用)依赖Azure Active Directory (AD) 进行用户身份管理时,确保用户生命周期事件(如用户删除)在两个系统间同步至关重要。本文将详细介绍如何配置Azure AD,以便在用户从应用中被删除时,能够及时通知您的服务器进行相应的处理。

1. 利用Microsoft Graph API变更通知实现实时同步

Microsoft Graph API 提供了强大的Webhooks机制,允许您的应用订阅Azure AD中特定资源(如用户)的变更通知。当用户数据发生添加、修改或删除时,Graph API会向您配置的回调URL发送通知。这是实现用户删除实时同步的首选方法。

1.1 工作原理

  1. 订阅资源变更: 您的应用通过Graph API创建一个订阅(Subscription),指定要监听的资源(例如 /users)、变更类型(例如 deleted)以及接收通知的回调URL。
  2. 接收通知: 当Azure AD中发生与订阅匹配的变更时,Graph API会向您的回调URL发送一个HTTP POST请求,其中包含变更的详细信息。
  3. 处理通知: 您的服务器接收到通知后,解析其内容,识别出被删除的用户,并执行相应的业务逻辑(例如从本地数据库中删除用户记录)。

1.2 实施步骤概述

  1. 注册应用并获取权限:

    • 在Azure AD中注册您的应用,并授予其必要的Microsoft Graph API权限,例如 User.Read.All 和 Directory.Read.All(对于读取用户信息)以及 Directory.AccessAsUser.All 或 Application.ReadWrite.All(对于创建订阅,具体取决于您的应用类型和需求)。
    • 确保您的应用具有访问Graph API的凭据(客户端ID、客户端密钥或证书)。
  2. 创建订阅请求: 您的应用需要向Microsoft Graph API发送一个POST请求以创建订阅。

    POST https://graph.microsoft.com/v1.0/subscriptions
    Content-Type: application/json
    
    {
      "changeType": "deleted",
      "notificationUrl": "https://your-server.com/api/graph-webhook-receiver",
      "resource": "/users",
      "expirationDateTime": "2024-03-01T18:23:45.9356913Z",
      "clientState": "secretClientValue"
    }
    • changeType: 指定您关注的变更类型,这里是 deleted。
    • notificationUrl: 这是您的服务器上接收通知的端点URL。
    • resource: 指定要订阅的资源路径,/users 表示所有用户。
    • expirationDateTime: 订阅的过期时间,最长为3天。您需要定期刷新订阅。
    • clientState: 一个可选的秘密字符串,用于验证通知的真实性。
  3. 实现通知接收端点: 在您的服务器上实现 https://your-server.com/api/graph-webhook-receiver 端点。

    • 验证订阅: 当Graph API首次创建订阅时,会发送一个验证请求到 notificationUrl,其中包含 validationToken 查询参数。您的端点必须返回 validationToken 的值作为纯文本响应,以确认URL有效。
    • 处理变更通知: 接收到实际的变更通知时,请求体将包含一个JSON数组,描述了发生的变更。您需要解析此JSON,提取出被删除用户的ID或其他相关信息,然后执行您的删除逻辑。
    <?php
    // 示例PHP代码片段 (伪代码)
    
    // 1. 验证订阅
    if (isset($_GET['validationToken'])) {
        header('Content-Type: text/plain');
        echo $_GET['validationToken'];
        exit;
    }
    
    // 2. 处理实际的变更通知
    $requestBody = file_get_contents('php://input');
    $notifications = json_decode($requestBody, true);
    
    foreach ($notifications['value'] as $notification) {
        if ($notification['changeType'] === 'deleted' && $notification['resource'] === 'users') {
            $userId = $notification['resourceData']['id']; // 获取被删除用户的ID
            // 验证 clientState 以确保通知来自 Graph API
            if ($notification['clientState'] === 'secretClientValue') {
                // 执行您的用户删除逻辑
                // 例如:从数据库中删除用户
                log_message("User {$userId} deleted from Azure AD. Deleting from local system.");
                // deleteUserFromLocalSystem($userId);
            } else {
                log_message("Invalid clientState for notification. Possible spoofing attempt.");
            }
        }
    }
    http_response_code(202); // 接受通知
    ?>

1.3 注意事项

  • 安全性: 务必验证 clientState 和请求的来源,确保通知确实来自Microsoft Graph。考虑使用TLS/SSL证书来保护您的回调URL。
  • 可靠性: 您的通知接收端点应具有幂等性,并能快速响应(HTTP 202 Accepted),避免Graph API重试发送通知。对于复杂的处理逻辑,可以考虑将任务放入消息队列异步处理。
  • 订阅生命周期: Graph API订阅有最长3天的有效期。您的应用需要定期刷新订阅,以保持通知的持续性。
  • 权限管理: 确保您的Azure AD应用仅拥有完成任务所需的最小权限。

2. 理解Azure AD去预配(De-provisioning)行为

Azure AD的去预配服务旨在将用户生命周期事件同步到已连接的SaaS应用。然而,对于用户删除事件,其行为模式需要特别理解。

代悟
代悟

开发者专属的AI搜索引擎

下载

2.1 去预配的两种状态

根据Microsoft文档,Azure AD中的用户删除分为两个阶段:

  1. 软删除(Soft Delete): 当管理员在Azure AD中删除用户时,用户首先会被软删除(发送到回收站),其 AccountEnabled 属性通常会设置为 false。在这个阶段,用户不会立即从租户中永久移除,而是保留30天。
  2. 永久删除(Permanent Delete):
    • 在软删除后的30天窗口期结束时,用户将被永久从租户中删除。此时,预配服务会向目标应用程序发送一个 DELETE 请求,以永久删除该用户。
    • 在30天窗口期内的任何时候,管理员也可以选择手动永久删除用户。这种操作也会立即触发预配服务向应用程序发送 DELETE 请求。

2.2 为什么标准去预配可能不满足即时需求

用户最初的问题在于,他们希望在管理员“删除用户”时(通常指软删除)立即收到通知。然而,标准的Azure AD去预配服务通常只在用户被 永久删除 时才发送DELETE请求到目标应用。这意味着如果仅依赖标准去预配,您的系统可能不会在用户被软删除时立即收到通知,而是在30天后或管理员手动永久删除后才收到。

因此,如果您的需求是在用户被管理员软删除时立即触发同步操作(例如,立即将用户从您的PHP系统中注销并删除),那么Microsoft Graph API的变更通知是更合适的解决方案,因为它能捕获到 deleted 状态的即时变更,而不仅仅是永久删除。

总结

为了在Azure AD用户被删除时,向您的外部系统发送请求并同步用户状态,强烈推荐使用Microsoft Graph API的变更通知(Webhooks)。这种方法提供了实时的、细粒度的控制,允许您在用户被软删除时即时响应。虽然Azure AD的去预配服务也能处理用户删除,但其DELETE请求通常在用户被永久删除时才触发,可能无法满足对即时同步的需求。结合使用Graph API Webhooks和对去预配机制的理解,可以构建一个健壮且响应迅速的用户生命周期管理系统。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

452

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

331

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

resource是什么文件
resource是什么文件

Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

176

2023.12.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

718

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1561

2023.10.24

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

4

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号