业务需求
技术环境
目前的努力
由于Web-api和Web应用程序不能使用访问特定用户驱动器所需的用户名/密码身份验证,因此请使用WebJob(不确定它是否符合本机应用程序)。
WebJob尝试使用驱动器所有者的凭据进行身份验证,但失败,并显示消息(AADSTS65001: The user or administrator has not consented to use the application with ID '<appId>' named 'OneDriveFileSystem'. Send an interactive authorization request for this user and resource.)
代码
授权请求
UserCredential uc = new UserPasswordCredential(userName, password);
AuthenticationResult result = null;
try
{
var authContext = new AuthenticationContext(authority);
result = authContext.AcquireTokenAsync(resource, clientId, uc).Result;
}
catch (Exception ee)
{
return string.Empty;
}
return result.AccessToken;
OneDriveAccess
string accessToken = GetAuthToken();
if (!string.IsNullOrEmpty(accessToken))
{
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
string payload = "{ \"name\": \"" + projectRequest.ProjectName + "\" , \"folder\": { } }";
HttpContent content = new StringContent(payload,
System.Text.Encoding.UTF8,
"application/json");
Uri uri = new Uri(resource + "/v1.0" + RootFolderItemId + RootFolderItemId + "/children");
HttpResponseMessage response = httpClient.PostAsync(uri, content).Result;
if (response.IsSuccessStatusCode)
{
var responseContent = response.Content;
}
}
(结果为404,但是相同的网址在Graph Explorer中起作用)
问题
此设计是否正确,或者我缺少一些关键要素? 我需要在用于OneDrive访问的帐户中注册该应用程序,还是只要密钥正确就可以允许它在任何用户的帐户中注册?
如果我更新代码以使用我的证书,它会要求进行多因素身份验证(由admin启用),但是由于这是本地的,因此无法提供。驱动器所有者帐户被创建为服务帐户,因此MFA不适用于该帐户。
可以提供所需的其他任何代码/配置
更新1 使用基于“我”的终结点(默认为self的文件夹)会导致403被禁止,即使我正在发送有效的访问令牌也是如此。授予了所有文件访问权限(请参见附图)。对于所有所需的权限,授予权限均成功。