我对https://graph.microsoft.io/en-us/docs/authorization/permission_scopes
上的文档感到有些困惑Mail.Read列出两次,但两次都表示不同的意思。第一个例子“[a]让应用程序读取用户邮箱中的电子邮件”,而第二个“[a]使应用程序在没有登录用户的情况下读取所有邮箱中的邮件”。第二个听起来像是值得“全部”限定符,不应该与第一个混淆,因为它们做了不同的事情。
当权限范围是先决条件(https://graph.microsoft.io/en-us/docs/api-reference/v1.0/api/user_list_messages)时,这尤其相关。我们可以期待什么样的行为?
我的主要问题是,我是否正确地认为没有办法授权允许所有邮件被登录用户读取?相反,我们必须使用仅限应用程序的权限?该文档给了我一些希望,如果没有仅限应用程序的权限就可以实现这一点,但试验和错误已经提示了。
答案 0 :(得分:1)
对应用程序和委派权限都有单独的Mail.Read
权限。
首先看一下标题为“仅限应用与委派权限”的部分
权限范围可以是仅限应用程序,也可以是委派。仅限应用范围 (也称为app角色)授予应用程序完整的权限集 范围提供。仅应用程序范围通常由应用程序使用 在没有登录用户的情况下作为服务运行。
委派的权限范围适用于代表用户执行的应用。 允许,这些范围委派登录用户的权限 该应用程序充当用户。授予应用程序的实际权限 将是最不重要的组合(交集) 范围授予的特权和登录所拥有的特权 用户。例如,如果权限范围授予委派的权限 写入所有目录对象,但登录用户具有权限 只有更新自己的用户个人资料,该应用程序才能够 写下已登录用户的个人资料,但没有其他对象。
“不需要管理员同意的权限”是委派权限,而“仅限应用程序权限需要管理员同意”是仅限应用程序的权限,这就是它出现两次的原因。
接下来要认识到的是,当您获得委派令牌时,您的应用所拥有的权限将是用户拥有的权限与通过同意授予的权限的交集。因此,使用登录用户的令牌,您将只能读取用户有权访问的邮件,其范围由Mail.Read.Shared
Mail.Read.Shared
Read user and shared mail
Allows the app to read mail that the user can access, including the user's own and shared mail.
如果要访问租户中所有用户的邮件,则必须拥有具有该访问级别的用户帐户...或者您需要使用仅授予访问权限范围的App App令牌。
Mail.Read
Read mail in all mailboxes
Allows the app to read mail in all mailboxes without a signed-in user.
请告诉我这是否有帮助!