【问题标题】:Microsoft Authentication Library(MSAL) not working with PNPJS to create SharePoint List ItemMicrosoft 身份验证库 (MSAL) 不使用 PNPJS 创建 SharePoint 列表项
【发布时间】:2021-06-24 15:02:59
【问题描述】:

使用下面的文章,我们应该能够执行访问和更新 SharePoint 数据。 Calling SharePoint via MSAL

但目前我们只能访问数据,但不能更新/写入数据到 SharePoint 列表。 这是我们在解决方案中使用的代码 sn-p。

import { MsalClientSetup  } from "@pnp/msaljsclient";
import { sp } from "@pnp/sp/presets/all";

sp.setup({
sp: {
    baseUrl: "https://{my tenant}.sharepoint.com/sites/dev/",
    fetchClientFactory: MsalClientSetup({
        auth: {
            authority: "https://login.microsoftonline.com/mytentant.onmicrosoft.com/",
        clientId: "00000000-0000-0000-0000-000000000000",
        redirectUri: "https://mytentant.sharepoint.com/sites/dev/SitePages/test.aspx",
         },
     }, ["https://mytentant.sharepoint.com/.default"]),
 },
});
const r = await sp.web();

//create list item
await sp.web.lists.getByTitle('FoodOrder')
  .items
  .add({
    Title: 'Chicken Fry',
    Quantity: 5,
    Remarks: 'Extra Spicy'
  })
 .then(async results => {
   console.dir(results);
 })
 .catch(err => {
   console.error(err.message);
 });

以下是通过 Azure APP 授予的权限。

当我们尝试在 SharePoint 列表中创建/更新项目时,它会引发以下错误。

访问被拒绝。 (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))

如果有人对此有解决方案,那将非常有帮助。任何想法将不胜感激,非常感谢。

【问题讨论】:

    标签: sharepoint msal spfx


    【解决方案1】:

    看起来您需要允许您的应用程序写入列表。只需授予它这样做的权限(您需要 AllSites.Write)。 ClientId 不应该是“0000000000-00....”,它应该是您的应用程序 ID,即您授予权限的应用程序的 ID。 “0000-...”只是一个占位符。

    如文档所述:

    调用图形 API 时,您必须指定所需的范围和 确保在 AAD 中配置它们

    所以基本上你应该这样做: https://docs.microsoft.com/en-us/graph/auth-register-app-v2

    【讨论】:

    • 是的,我添加了正确的 ClientID,但出于安全原因,我已在上述问题中隐藏。此外,我还授予/配置了与 SharePoint 操作(AllSites.FullControl、AllSites.Manage、AllSites.Read、AllSites.Write)相关的所有 4 项权限,并在问题上进行了相同的更新。具有 MSAL 的 PnPjs 是否可以帮助您在 SharePoint 中创建项目?任何想法将不胜感激,非常感谢。
    • 我个人没有使用 MSAL 库(我在 Teams 中使用单点登录),在这种情况下,如果您设置权限(即对于 SharePoint),权限就可以正常工作。意思是,我只是直接调用 AzureAD 休息端点。您可以尝试通过查看您获得的令牌及其范围来调试它:只需将其粘贴到jwt.io,它就可以很好地解码共享点令牌。
    • 再想一想——也许旧权限有效?尝试从 EnterpriseApplications 中删除您的应用许可,并获得新的许可。您应该会在同意书中看到直接要求“写”的应用程序。 docs.microsoft.com/en-us/azure/active-directory/manage-apps/…,清除浏览器缓存(包括appdata)
    • 我已按照上述步骤使用 EnterpriseApplications 清理权限并尝试但无法正常工作并出现相同的错误。只是怀疑 MSAL 是否提供了委派任何类型的权限或只读权限的选项,因为我们看到所有 MS 文章和其他博主都解释说只从用户邮箱读取用户个人资料信息或邮件。我没有找到任何使用 MSAL 编写/发布数据的 MS 文档。
    • 我认为如果您完全使用 MSAL 进行了身份验证,这意味着 MSAL 正在工作,那么它一定是配置问题。检查我以前的 cmets - 检查令牌,重置应用程序,清除同意。
    猜你喜欢
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多