簡體   English   中英

在 C# 中訪問 SharePoint 的最佳方式是什么

[英]What is the best way to access SharePoint in C#

我正在更新我 2-3 年前用 C# 制作的 Excel 補充。目標是獲取一些存儲在 SharePoint 站點上的文件,將它們復制到本地,然后打開它們。 我有權訪問 SharePoint 站點,但我對 SharePoint 的設置沒有管理員權限(它由我們的 IT 服務運行,公司安全性在數據保護方面很嚴格)。 我們使用MFA登錄我們的Windows session,之后就可以訪問SharePoint等服務,無需再次輸入密碼。 到目前為止,我已經使用了下面的代碼,它仍然可以完美運行:

using Microsoft.SharePoint.Client;
using OfficeDevPnP.Core;

string tempFileName = System.IO.Path.GetTempPath() + "filename.xlsx";

AuthenticationManager mgr = new AuthenticationManager();
ClientContext context = mgr.GetWebLoginClientContext("https://xxx.sharepoint.com/teams/mypage");
FileInformation fileinfo = File.OpenBinaryDirect(context, "ServerRealtivePath");
context.ExecuteQuery();

System.IO.FileStream fStream = new System.IO.FileStream(tempFileName, System.IO.FileMode.Create);
await fileinfo.Stream.CopyToAsync(fStream);
fStream.Close();
fileinfo.Stream.Close();

那么,為什么要嘗試修復未損壞的東西……呢? 包含 OfficeDevPnP NameSpace 的 NuGet package SharePointPnPCoreOnline 現已標記為已停用,建議改用 PnPFramework。 但是 PnPFramework 不包含 AuthenticationManager.GetWebLoginClientContext() 方法。 隨着對數據保護和新技術的需求不斷增長,我預計當前的方法將在某個時候停止工作。 您是否有使用更現代的方式連接到 sharepoint 的等效方法?

我沒有使用 Azure 注冊該應用程序的任何權限,我猜這將是我們 IT 服務的一個很大的拒絕。 如果需要,我不介意要求用戶在某個時候輸入他的登錄名。 我從未使用過 REST 或 GRAPH API,但如果有幫助,我可以調查一下。 我想要基於當前用戶權限訪問文件的權利。 如果用戶沒有訪問指定文件的權限,我不希望應用能夠下載它。

我願意接受建議,謝謝

對於我的工具,我剛剛修改了GetWebLoginClientContext中的代碼, 它既不大也不復雜 這也是它的更新版本 那么,里面有什么:帶有 web 瀏覽器控件(基於 Inte.net Explorer)的簡單表單。 當瀏覽器控件對用戶進行身份驗證時,代碼使用平台 web 瀏覽器 API 從瀏覽器控件獲取身份驗證 cookies,並在后續調用 SharePoint 時使用它。

此處可能出現的問題:Inte.net Explorer(以及瀏覽器控件)已被棄用,對它的支持已於去年結束。 如果身份驗證 window 在從瀏覽器控件打開時停止工作,那將是一個問題。 我已經通過使用 WebView2 而不是瀏覽器控件為自己“修復”了該問題,並且由於它是常青樹,所以應該沒問題。 它還提供了API來得到cookies,我們需要調用SharePoint。

我不認為 cookie 身份驗證的方法本身是一個問題,但他們可能有一天會更改 cookies 然后如果發生這種情況,應用程序可能需要相應地更新。

一種更“穩健”的方法是無論如何都要在公元 Azure 年注冊一個應用程序(實際上,您絕對不必要求管理員注冊該應用程序,您可以在自己的“組織”中為自己注冊一個,而無需詢問任何人) .

使用這種方法,用戶必須同意使用該應用程序(以允許該應用程序訪問組織中的數據)。 可能需要管理員同意,但這取決於組織設置(默認情況下不需要,用戶同意就足夠了)。

請注意,使用“應用程序”連接實際上更安全,因為當您授予對應用程序的訪問權限時,您只授予它特定的權限(即您獲得用戶權限和授予該應用程序的權限的交集)。 當以用戶身份連接時(即使用上面的“cookies”方法),您將獲得完全訪問權限(即您可以做用戶可以做的任何事情)。

還有一點,對於應用程序,您實際上不必在 web 上構建任何東西(實際上不需要網站); 獲取訪問令牌的“回調 url”可以托管在應用程序本身(本地主機)中,或者可以將應用程序配置為使用設備代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM