使用用户名/密码身份验证的Azure One Drive访问(本地应用)

时间:2018-07-04 04:15:55

标签: azure-active-directory microsoft-graph onedrive azure-webjobs

业务需求

  • OneDrive可以创建一个用户级别的文件夹,并共享给团队的特定成员。
  • 拥有用户权限的用户可以为项目创建文件夹并为某些成员分配独占权限(删除对非项目成员的访问权限)

技术环境

  • 通过Graph API访问一个驱动器
  • ADAL身份验证
  • Web作业在Azure App中托管为NativeJob,并授予了所需的OneDrive访问权限。
  • 在我的应用程序中注册的应用程序(不是用于访问OneDrive的帐户

目前的努力 由于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被禁止,即使我正在发送有效的访问令牌也是如此。授予了所有文件访问权限(请参见附图)permissions granted。对于所有所需的权限,授予权限均成功。

0 个答案:

没有答案