我可以使用Microsoft Graph编程API查看所有AAD用户(包括服务主体)的登录。这是一个常用的功能:
https://learn.microsoft.com/en-us/graph/api/signin-list?view=graph-rest-beta&tabs=http#permissions
如果不是管理员,一般用户不允许使用该API。此规则的例外是用户可以检查自己的登录。根据文件,其规定:
注意:具有任何权限的Azure AD用户都可以读取其用户是登录执行元的登录日志
检查您自己的登录是通过筛选userId来完成的。我试着从一个服务主体使用这个来检查它自己的登录,如下所示:
https://graph.microsoft.com/beta/auditLogs/signIns $filter=(userId eq '123792d1-b50f-4f7f-a8a3- 40e0341e9e22')&$top=10
在上面的示例中,“userId”是AAD服务主体的oid。然而,当我测试这一点时,API不断失败,并阻止我的服务检查自己的登录。错误消息说:
“调用主体不具有所需的MSGraph权限AuditLog.Read.All”
有人能解释一下为什么AAD不允许服务主体根据文档审查自己的登录吗?
1条答案
按热度按时间ckocjqey1#
我创建了一个Azure AD应用程序,但没有授予任何API权限,如下所示:
现在,我使用以下参数生成了access token:
当我尝试获取Service Principal的审计日志时,我得到了如下的error:
注意:
因此,要解决此错误,请确保Admin同意**
AuditLog.Read.All
* API权限:分配API权限后,我可以成功获取Audit日志如下:
参考:
Get signIn - Microsoft Graph v1.0 | Microsoft Learn