我的同事和我正在开发的应用程序会生成一些 PDF 文件并将结果流式传输回客户端。此 MVC 应用程序仅针对一个特定客户。
这个想法是将 PDF 文件集中导出到 OneDrive (for Business) ,以便客户可以随时随地在任何设备上查看文档。
是否可以将 Microsoft Graph API 与 msal 身份验证(v2.0 端点)结合使用来完成此操作?
我们可以将 OneDrive for Business 视为小型企业的“中央存储”解决方案吗?
谢谢你的任何建议。:)
我的同事和我正在开发的应用程序会生成一些 PDF 文件并将结果流式传输回客户端。此 MVC 应用程序仅针对一个特定客户。
这个想法是将 PDF 文件集中导出到 OneDrive (for Business) ,以便客户可以随时随地在任何设备上查看文档。
是否可以将 Microsoft Graph API 与 msal 身份验证(v2.0 端点)结合使用来完成此操作?
我们可以将 OneDrive for Business 视为小型企业的“中央存储”解决方案吗?
谢谢你的任何建议。:)
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;
});
}
}
}
我假设您正在使用 C# 应用程序的某些变体(ASP.NET、UWP、Xamarin)。在任何这些情况下,您尝试做的事情绝对是可能的。
UWP Snippets 示例和Xamarin Snippets 示例都演示了使用 MSAL 以及使用 Microsoft Graph Client Library for .NET 的各种 Microsoft Graph 调用的身份验证。两者也都有在 OneDrive 上进行上传、下载、更新等操作的示例。
如果您使用的是 .NET 以外的其他平台/语言,则 MSAL 将不适用,但 Github 上有许多其他示例供您查看。其中一些演示了 v2.0 身份验证端点的使用。