访问 SharePoint _api/Web/SiteUsers 时出现 403 禁止错误

Getting a 403 Forbidden error accessing the SharePoint _api/Web/SiteUsers

我正在开发一个应用程序,该应用程序于 2021 年 1 月 20 日在 Azure AD 中注册(通过“应用程序注册”页面),它使用 SharePoint REST API (_api /Web/SiteUsers,等等)来检索用户信息(从 SharePoint 在线)。使用我当时获得的租户 ID、应用程序 ID 和客户端密码,该应用程序过去并且现在仍然可以正常工作。几天前(2021 年 4 月 9 日),我在 Azure 中注册了第二个应用程序,向一位同事展示如何进行设置。使用该新应用程序的应用程序 ID 和客户端密码(相同的租户 ID),当我提交对 _api/Web/SiteUsers 的调用(调用 MS Graph APIs 时,应用程序失败并出现错误 403使用两个应用程序 ID 都可以正常工作——只有 SharePoint api 调用失败了)。两个注册的应用程序都设置了相同的权限——当我并排比较它们时,我看不出有什么不同。他们都拥有 MS Graph API:(Directory.Read.All, Files.Read.All, Sites.Read.All, Group.Read.All) 和 SharePoint:(Sites.Read.All, User.Read.All),以及 MS GraphAPI:User.Read 的委派权限。所有应用程序权限均已获得管理员同意。两者都使用秘密密钥。我直观地比较了 Azure 中的两个注册应用程序,看不到任何其他属性(应用程序 ID、客户端 ID、品牌名称、密钥除外)的任何差异。有谁知道最近是否有什么变化会导致较早的应用程序 ID 工作,而不是最近的应用程序 ID? Azure 和 SharePoint 之间是否存在某种同步延迟(问题在 3 天后仍然存在)?任何 help/hints 将不胜感激。提前谢谢你。

有效的 App ID 解码令牌:

{
  "typ": "JWT",
  "alg": "RS256",
  "x5t": "nOo3ZDrODXEK1jKWhXslHR_KXEg",
  "kid": "nOo3ZDrODXEK1jKWhXslHR_KXEg"
}.{
  "aud": "00000003-0000-0ff1ce00-000000000000/iplatinum1.sharepoint.com@55379f90-a2a4-4f64-b18d-f3453e934a85",
  "iss": "00000001-0000-0000-c000-000000000000@55379f90-a2a4-4f64-b18d-f3453e934a85",
  "iat": 1618276524,
  "nbf": 1618276524,
  "exp": 1618363224,
  "identityprovider": "00000001-0000-0000-c000-000000000000@55379f90-a2a4-4f64-b18d-f3453e934a85",
  "nameid": "7c331853-01ae-422b-bfe4-7df2d3fdbacf@55379f90-a2a4-4f64-b18d-f3453e934a85",
  "oid": "fa4507cb-dfb1-4ed4-9d06-5fa9ffcb814e",
  "sub": "fa4507cb-dfb1-4ed4-9d06-5fa9ffcb814e",
  "trustedfordelegation": "false"
}.[Signature]

对于没有的:

{
  "typ": "JWT",
  "alg": "RS256",
  "x5t": "nOo3ZDrODXEK1jKWhXslHR_KXEg",
  "kid": "nOo3ZDrODXEK1jKWhXslHR_KXEg"
}.{
  "aud": "00000003-0000-0ff1-ce00-000000000000/iplatinum1.sharepoint.com@55379f90-a2a4-4f64-b18d-f3453e934a85",
  "iss": "00000001-0000-0000-c000-000000000000@55379f90-a2a4-4f64-b18d-f3453e934a85",
  "iat": 1618276454,
  "nbf": 1618276454,
  "exp": 1618363154,
  "identityprovider": "00000001-0000-0000-c000-000000000000@55379f90-a2a4-4f64-b18d-f3453e934a85",
  "nameid": "7307b725-738e-4b8c-b898-89486cff95de@55379f90-a2a4-4f64-b18d-f3453e934a85",
  "oid": "08650d87-1a47-436f-a8e1-ee44caa361ee",
  "sub": "08650d87-1a47-436f-a8e1-ee44caa361ee",
  "trustedfordelegation": "false"
}.[Signature]

据我所知,Azure AD App Client Secret 被 sharepoint online 屏蔽了。您需要选择证书进行身份验证:https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread

另一种解决方法是在 SharePoint 站点“https://yoursite/_layouts/15/appregnew.aspx”中注册应用程序。通过这种方式,您可以起诉客户机密。 https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs

正如 Michael Han 所指出的,我必须在 SharePoint 中注册 App ID。完成后,访问权限被授予。