azure 如何使用MSGraph编程API检查服务主体的登录列表

nx7onnlm  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(173)

我可以使用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不允许服务主体根据文档审查自己的登录吗?

ckocjqey

ckocjqey1#

我创建了一个Azure AD应用程序,但没有授予任何API权限,如下所示:

现在,我使用以下参数生成了access token

https://login.microsoftonline.com/TenantID/oauth2/v2.0/token

client_id:ClientID
client_secret:ClientSecret
scope:https://graph.microsoft.com/.default
grant_type:client_credentials

当我尝试获取Service Principal的审计日志时,我得到了如下的error

GET https://graph.microsoft.com/v1.0/auditLogs/signIns?$filter=(userId eq 'SPObjID')

注意

  • 根据MsDoc,任何具有适当权限的Azure AD用户都可以访问读取登录日志,其中他们的用户是登录参与者,但Service Principal有一些例外,可能不属于此类别。
  • 为了建立用于登录和/或访问资源的身份,使用服务主体。
  • 可以向服务主体授予访问和权限,但不能直接更新或更改它们。服务主体不属于能够查看登录日志的用户,其中他们的用户是登录的参与者。

因此,要解决此错误,请确保Admin同意**AuditLog.Read.All * API权限:

分配API权限后,我可以成功获取Audit日志如下:

参考:

Get signIn - Microsoft Graph v1.0 | Microsoft Learn

相关问题