使用现代身份验证从SharePoint下载文件



我有一个从SharePoint下载文档的Azure函数。

SecureString secureString = new SecureString();
foreach (char c in password.ToCharArray())
{
secureString.AppendChar(c);
}
ICredentials credentials = new SharePointOnlineCredentials(username, secureString);

webUrl = webUrl.EndsWith("/") ? webUrl.Substring(0, webUrl.Length - 1) : webUrl;
string webRelativeUrl = null;
if (webUrl.Split('/').Length > 3)
{
webRelativeUrl = "/" + webUrl.Split(new char[] { '/' }, 4)[3];
}
else
{
webRelativeUrl = "";
}
using (WebClient client = new WebClient())
{
client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
client.Credentials = credentials;
byte[] data;
try
{
Uri endpointUri = new Uri(webUrl + "/_api/web/GetFileByServerRelativeUrl('" + webRelativeUrl + path + "')/$value");
data = client.DownloadData(endpointUri);
}
catch(Exception e)
{

}

}

现在在CCD_ 1上,我接收到InnerException CCD_。

经过一些研究,我得出的结论是,我使用了"遗留身份验证方法"。不能选择重新启用旧版身份验证。

据我所知,我必须使用"现代身份验证"。

现在我的问题是:如何通过Azure功能通过现代身份验证从SharePoint下载/上传文件?

附带说明:我的Azure功能通过PowerAutomate中的HTTPPost触发。

Sharepoint Online凭据-相当于让用户自己在不在场的情况下使用密码登录(通过硬编码用户名和密码(。如果Legacy Authentication方法被阻止(出于安全原因(,则需要用户进行交互才能进行身份验证并获取令牌以进行后续操作。

由于您正在使用Azure功能,因此无法通过交互从Sharepoint检索下载文件所需的令牌。

为了克服这一点,您可以使用Sharepoint App Only Access进行下载。

这绕过了访问文件/下载文件时对用户/用户凭据的要求。您将使用客户端机密和客户端ID进行身份验证。您还可以限制应用程序的权限。

你可以参考这个:

https://learn.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs

或者,您可以使用-App-only Graph权限来读取文件内容。

最新更新