来宾 AD 用户的图形 API POST 请求(创建列表项)“accessDenied”错误

时间:2021-06-09 11:25:41

标签: azure-active-directory microsoft-graph-api sharepoint-online

我有一个很奇怪的问题(我认为是这样)...我正在使用 Ionic Angular 构建一个 Web 应用程序,这个应用程序需要向我们公司内的一个 SharePoint 站点提交信息。应用程序的身份验证使用 Microsoft Authentication Library for Angular (v1) 处理,应用程序的用户可以是 AzureAD 来宾用户,也可以是实际的公司用户。该应用程序成功地对这两种类型的用户进行了身份验证,并向他们颁发了一个 IDtoken 以及一个 accessToken。然后使用访问令牌针对 SharePoint 网站内的特定列表执行 GET、PATCH 和 POST Graph API 请求。

如果我以完整用户身份登录...没有问题,应用程序可以针对列表成功执行所有三种请求类型。但是,如果我以访客用户身份登录应用程序,则只能成功执行 GET 和 PATCH 请求,而不能成功执行 POST:

A Postman POST request using the access token retrieved via MSAL authentication

我已使用 https://jwt.ms 检查令牌中的范围并确认存在以下范围:

  • Sites.Manage.All
  • Sites.Read.All
  • Sites.ReadWrite.All
  • 用户.读取个人资料 openid 电子邮件

列表的权限是通过 Azure AD 域/安全组的成员身份授予的;完整用户和来宾用户是成员。

为了进一步补充这一点,我已以访客用户身份在线登录 SharePoint 网站,我可以成功地查看、添加和编辑列表中的列表项,但我似乎无法通过 Graph API 执行此操作.

以前有没有人见过这种行为,或者有任何指示?

提前致谢。

这是我关于权限的应用注册设置: API Permissions

1 个答案:

答案 0 :(得分:0)

请检查您在 Azure 门户中的权限。使用登录用户获取访问令牌时,您需要确保已设置委托权限 Sites.ReadWrite.All,并为您的租户授予管理员同意 .

enter image description here

并且应该为范围添加此权限以请求访问令牌。

POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token 

client_id=<client_id>
&scope=https%3A%2F%2Fgraph.microsoft.com%2FSites.ReadWrite.All
&code=<authorization_code, see https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow#request-an-authorization-code>
&redirect_uri=<redirect_uri>
&grant_type=authorization_code
&code_verifier=ThisIsntRandomButItNeedsToBe43CharactersLong 
&client_secret=<client_secret>

添加权限后可能会延迟5-10分钟左右。