如何使用 CSOM 运行长任务时管理可能的令牌过期

问题描述 投票:0回答:1

在我的应用程序上,我使用 MSAL 包获取访问令牌,然后将其添加到上下文中,如下面的示例所示:

using var clientContext = new ClientContext(oSite.Url);

    clientContext.ExecutingWebRequest += (sender, e) =>
    {
    e.WebRequestExecutor.RequestHeaders["Authorization"] = "Bearer " + rootSiteAccessToken;
    };

有了这个上下文,我就可以获取每个库上的文件并迭代它们进行所需的更改。

此刻我被困在获取文件上; 500k 项后我的访问被拒绝。我想这是由于令牌过期造成的。我正在做更多测试来确认这种情况,但我肯定会在某个时刻遇到这个问题,因为主库有 3M 文件。虽然我正在获取文件并批量处理它们以免耗尽内存,但我预计该任务将需要运行几天。

我想知道,在这种情况下,最好的做法是避免因令牌过期而导致访问被拒绝。

使用 PnP PowerShell 我运行的脚本可以运行数周。但我无法从其代码中清楚地了解他们如何管理交互式凭证。

此外,如果有人对如何有效收集 3M 文件有好的建议,那就太棒了。

非常感谢。

c# sharepoint access-token csom
1个回答
0
投票

SharePoint API 允许自动更新令牌。您只需为您的应用启用自动续订即可。为此,您需要向您的应用授予“offline_access”权限(并在创建 CSOM 客户端时使用它,即请求此范围)。应该可以做到这一点。如果您已向应用程序授予此权限,CSOM 会自动更新令牌。

© www.soinside.com 2019 - 2024. All rights reserved.