簡體   English   中英

使用Microsoft Graph API和MSAL身份驗證將文檔保存在OneDrive上

[英]Save documents on OneDrive using Microsoft Graph API and MSAL auth

我和我的同事正在使用的應用程序會生成一些PDF文件,並將結果流回客戶端。 此MVC應用程序僅針對一個特定客戶。

這個想法是將PDF文件集中導出到OneDrive(用於企業),以便客戶可以在任何時間,任何地方,任何設備上查看文檔。

是否可以將Microsoft Graph API與msal身份驗證(v2.0端點)結合使用來完成此任務?
我們是否可以將OneDrive for Business視為小型企業的“中央存儲”解決方案?

謝謝您的任何建議。

我假設您使用的是C#應用程序的某些變體(ASP.NET,UWP,Xamarin)。 在上述任何一種情況下,您嘗試執行的操作絕對可能。

UWP代碼段示例Xamarin代碼段示例均演示了使用MSAL結合使用Microsoft Graph Client Library for .NET進行的身份驗證以及各種Microsoft Graph調用。 兩者都具有在OneDrive上進行上傳,下載,更新和其他操作的示例。

如果您使用的是.NET以外的其他平台/語言,則不適用MSAL,但Github上還有許多其他示例可供您簽出。 其中幾個演示了v2.0身份驗證端點的用法。

v2身份驗證端點當前不支持僅應用程序范圍,該范圍僅在沒有UI交互的情況下進行身份驗證。 通過在Azure AD中登錄,可以使用Microsoft身份驗證庫(MSAL)獲取訪問令牌和刷新令牌。 然后,您可以使用訪問令牌和刷新令牌來與用戶進行交互。

刷新令牌的有效期為14天,如果連續使用,它們的有效期最長為90天。 90天后,將要求用戶重新認證。

這是一個示例,供您參考以將PDF上載到OneDrive,以提高工作效率:

   public static void CreateItem(string accessToken)
    {
        string itemCreateUri = "https://graph.microsoft.com/v1.0/me/drive/root/children";
        string itemData = "{\"name\":\"book2.pdf\",\"file\":{}}";
        var itemCreatedResult = RESTRequsetHelper.RESTRequsetHelper.PostAsync(itemCreateUri, itemData, accessToken).Result;
        DriveItem item = new DriveItem(itemCreatedResult);

        string itemUploadUri= $"https://graph.microsoft.com/v1.0/me/drive/items/{item.Id}/content";

        System.IO.FileStream fs = System.IO.File.Open(@"C:\users\user1\desktop\book1.pdf",System.IO.FileMode.Open);
        StreamContent streamContent = new StreamContent(fs);
        var uploadResult= RESTRequsetHelper.RESTRequsetHelper.SendHttpRequest(HttpVerb.PUT, itemUploadUri, streamContent, accessToken).Result;

        fs.Close();

    }

  public static async Task<string> PostAsync(string uri, string jsonBody, string accessToken)
    {
        return await SendHttpRequest(HttpVerb.POST, uri, jsonBody, accessToken);
    }

   private static async Task<string> SendHttpRequest(HttpVerb ver, string uri, string jsonBody, string accessToken)
    {
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", $"{accessToken}");
        var stringContent = new StringContent(jsonBody,Encoding.UTF8,"application/json");

        if (ver == HttpVerb.POST)
        {
            return await client.PostAsync(uri, stringContent).ContinueWith<string>((response) =>
           {
               return response.Result.Content.ReadAsStringAsync().Result;
           });
        }
        else
        {
            return await client.PutAsync(uri, stringContent).ContinueWith<string>((response) =>
            {
                return response.Result.Content.ReadAsStringAsync().Result;
            });
        }

    }

    public static async Task<string> SendHttpRequest(HttpVerb ver, string uri, StreamContent steamBody, string accessToken)
    {
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("bearer", $"{accessToken}");

        if (ver == HttpVerb.POST)
        {
            return await client.PostAsync(uri, steamBody).ContinueWith<string>((response) =>
            {
                return response.Result.Content.ReadAsStringAsync().Result;
            });
        }
        else
        {
            return await client.PutAsync(uri, steamBody).ContinueWith<string>((response) =>
            {
                return response.Result.Content.ReadAsStringAsync().Result;
            });
        }

    }
}

暫無
暫無

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

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