The*_*ico 17 c# windows-services login file-upload onedrive
我目前正在开发一种Windows服务,它将检查和更新Excel文件并将其上传到选定的云存储 - SharePoint或OneDrive.整个过程应该是全自动的,无需任何用户交互 - 所有必需的信息(用户名,密码等)都是配置文件的一部分.
除OneDrive部分外,一切顺利.我无法找到登录并上传到此云存储的全自动解决方案.我知道Microsoft Live SDK,但是它对非WinPhone和-WinStore应用程序的支持减少了,据我所知,它总是要求用户输入用户名,密码(webbrowser组件).
第二个选项是SkyDriveClientAPI(此处链接),但此API不再起作用(如问题中所述).
有没有办法在没有用户交互的情况下使用Live SDK,或者您是否有其他方式的其他建议?
这是部分可以实现的
正如其他答案中提到的,一个驱动器需要用户身份验证,这使得全自动解决方案变得不可能。
然而,一个几乎自动的解决方案是可能的,这意味着可以创建一个应用程序,它需要一次登录(第一次激活)和登录后,用户对正在运行的应用程序的授权,从那时起,应用程序将能够自动工作(上传、下载、创建文件夹、直接链接到上传的文件等......),即使应用程序关闭并重新启动机器,这也将继续工作。
从一个驱动器连接中脱离应用程序的唯一方法是注销应用程序(可以自动实现)。
这可以通过使用 LIVE sdk(桌面)并遵循单点登录指南来实现,您很可能需要访问以下范围:
检查一个驱动器开发中心:
为了实现这种行为,我建议按照以下步骤操作:
使用示例构建一个基本的演示应用程序后:
迟了两年回答,但我认为这对以后的使用会有帮助。
注册应用程序后,您无需弹出窗口即可获取访问令牌,请参阅这篇文章使用 OAuth REST API 获取 Microsoft Graph 的访问令牌。如何获取token(一个postman的例子),我根据这个postman的例子写了下面的代码:
一个用于在不弹出窗口的情况下获取令牌的 C# 示例:
public async Task GetTokenAsync(string tenant, string clientId, string clientSecret, string username, string password)
{
HttpResponseMessage resp;
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
var req = new HttpRequestMessage(HttpMethod.Post, $"https://login.microsoftonline.com/{tenant}/oauth2/token/");
req.Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
{"grant_type", "password"},
{"client_id", clientId},
{"client_secret", clientSecret},
{"resource", "https://graph.microsoft.com"},
{"username", username},
{"password", password}
});
resp = await httpClient.SendAsync(req);
string content = await resp.Content.ReadAsStringAsync();
var jsonObj = new JavaScriptSerializer().Deserialize<dynamic>(content);
string token = jsonObj["access_token"];
Console.WriteLine(token);
}
}
Run Code Online (Sandbox Code Playgroud)
获得令牌后,即可轻松登录。
| 归档时间: |
|
| 查看次数: |
23234 次 |
| 最近记录: |