通过客户端凭证流程进行图形身份验证 - 我的应用程序只能访问我的用户帐户还是整个组织?

Graph authentication through Client Credentials flow - Will my app have access to just my user account or to the whole organization?

我有一个守护程序脚本需要访问我的 Office 365 收件箱才能阅读邮件。目前,我正在使用 Outlook Rest API 的 V1.0 的基本身份验证,效果很好,但由于它已停产,我希望转向 Graph API 和 OAuth 2.0 身份验证。如 here 所述,客户端凭据流似乎是守护程序脚本的最佳选择,但是,我对应用程序将拥有的权限范围感到困惑。我上面链接的文章使该应用程序看起来好像可以访问整个组织,但我只需要脚本就可以访问我自己的帐户。我不希望我的应用访问其他用户的帐户,我不认为我们的 I.T。部门也会允许的。

那么,使用client-credentials认证时,应用的权限范围是什么? 如果答案是"the whole organization",那么有没有一种将权限限制为仅我的帐户的方法?如果没有,我的其他选择是什么?

编辑:有人问了类似的问题 here 但没有得到任何答案。

没错。如果您使用客户端凭据,则根据定义,您就是在使用应用程序范围。这些令牌没有 "user" 上下文,因此是租户范围的权限。这就是为什么应用程序范围在使用之前总是需要管理员同意。

来自documentation

Mail.Read (Read mail in all mailboxes)

Allows the app to read mail in all mailboxes without a signed-in user.

如果这只是针对您的邮箱而不是您要部署给其他人的东西,您可以使用具有 offline_access 范围的授权码授予来获得 access_tokenrefresh_token.

一旦您 "seeded" 您的应用程序有了令牌,该应用程序就可以使用 refresh_token 在它过期时获取新的 access_token。您可能偶尔需要重新设置您的 app/service(例如,如果您的密码更改),但除此之外,它应该可以在没有交互的情况下工作。

现在可以根据 Microsoft Docs 来限定应用程序权限。

Some apps call Microsoft Graph using their own identity and not on behalf of a user. These are usually background services or daemon apps that run on a server without the presence of a signed-in user. These apps make use of OAuth 2.0 client credentials grant flow to authenticate and are configured with application permissions, which enable such apps to access all mailboxes in a organization on Exchange Online. For example, the Mail.Read application permission allows apps to read mail in all mailboxes without a signed-in user.

Administrators who want to limit the app access to a specific set of mailboxes can use the New-ApplicationAccessPolicy PowerShell cmdlet to configure access control.