Microsoft Graph创建用户创建事件订阅未收到通知求助
问题解答
你的预期没问题,Microsoft Graph确实支持通过订阅/users资源的created事件来接收新用户创建的通知,收不到通知大概率是配置或权限环节有疏漏,下面给你分析原因和解决办法:
可能的问题点
- 权限不足:订阅用户创建事件需要应用权限(而非委托权限),必须确保你的应用已获得
Directory.Read.All或Directory.ReadWrite.All权限,且完成了管理员同意。委托权限无法触发租户级的用户创建通知。 - 通知端点未通过验证:创建订阅时,Graph会向你的
NotificationUrl发送验证请求,要求返回请求中的validationToken参数。如果你的端点没正确处理这个验证逻辑,订阅会处于无效状态,自然收不到通知。 - 订阅状态异常:创建订阅后可以调用
GET /subscriptions接口查看订阅状态,确认是否为active。如果是failed,可以通过生命周期通知(LifecycleNotificationUrl)查看具体错误原因。
调整实现方案
- 确认权限配置:
在Azure AD应用注册中,前往「API权限」添加Microsoft Graph的Directory.Read.All应用权限,点击「授予管理员同意」。 - 完善通知端点验证逻辑:
你的/api/notifications端点需要处理GET请求,当收到包含validationToken参数的请求时,直接返回该参数内容(HTTP 200状态码)。示例逻辑(C#):[HttpGet] public IActionResult ValidateNotification([FromQuery] string validationToken) { return Ok(validationToken); } - 备选方案:订阅审计日志
如果直接订阅/users的created事件仍有问题,可以转而订阅Azure AD的审计日志,筛选用户创建事件:var sub = new Microsoft.Graph.Models.Subscription(); sub.ChangeType = "created"; sub.NotificationUrl = "https://*********.eu.ngrok.io/api/notifications"; sub.Resource = "/auditLogs/directoryAudits"; sub.LifecycleNotificationUrl = "https://*******.eu.ngrok.io/api/notifications"; sub.ExpirationDateTime = DateTime.UtcNow.AddMinutes(10); sub.ClientState = "SecretClientState"; // 后续可以在通知中筛选operationName为"Add user"的事件
内容的提问来源于stack exchange,提问作者Baha Bayar
相关产品推荐
相关产品推荐

