![](/img/trans.png)
[英]using MSAL Authentication in WASM Application calls to Microsoft Graph and custom API
[英]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.