【问题标题】:dotnet Core - Using azure AD authentication to retrive data from sharepoint REST APIdotnet Core - 使用 azure AD 身份验证从 sharepoint REST API 检索数据
【发布时间】:2020-10-02 01:56:23
【问题描述】:

我的项目设置为使用 azure ad 作为登录名(来自 dotnet 核心模板)。我已成功登录。

但是,我想使用相同的登录用户从 sharepoint rest api 检索数据。

我有以下方法:

public async Task<FileResults> Test()

    {
        var siteUrl = "https://xxxxx.sharepoint.com";

        var username = "xx@xx.no";
        var password = "xxxxxx";
        var securePassword = new SecureString();
        password.ToCharArray().ToList().ForEach(c => securePassword.AppendChar(c));
        var credentials = new SharePointOnlineCredentials(username, securePassword);

        var handler = new HttpClientHandler();
        handler.Credentials = credentials;

        var uri = new Uri(siteUrl);
        handler.CookieContainer.SetCookies(uri, credentials.GetAuthenticationCookie(uri));

        var json = string.Empty;
        using (var client = new HttpClient(handler))
        {
            client.DefaultRequestHeaders.Clear();
            client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
            var response = await client.GetAsync(siteUrl + "/_api/Web/GetFolderByServerRelativeUrl('/Delte%20dokumenter/Test')/Files");
            json = await response.Content.ReadAsStringAsync();

            var result = Newtonsoft.Json.JsonConvert.DeserializeObject<Rootobject>(json);
            var files = result.FileResults;
            return files;
        }
    }

这工作正常,我正在从共享点获取文档。 但是,这是在使用硬编码凭据时。如何通过 azure AD 使用登录用户的凭据?我要检索访问令牌吗?

【问题讨论】:

    标签: sharepoint .net-core azure-active-directory sharepoint-rest-api microsoft-graph-files


    【解决方案1】:

    要使用 Azure AD 身份验证,您需要拥有Authentication flows 之一。

    注意:用户名/密码流程为not recommended

    之后,您将根据指定的范围获取令牌,并且您需要点击 Microsoft Graph Api,在内部,您需要根据您的要求点击 SharePoint API 端点。

    你可以从这个sample开始探索

    【讨论】:

    • 你好。我的应用程序不是已经在使用身份验证流程了吗?我在启动时使用以下内容: services.AddAuthentication(AzureADDefaults.AuthenticationScheme) .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options => { options.ExpireTimeSpan = TimeSpan.FromDays(30); }) .AddAzureAD(options => Configuration.Bind(" AzureAd", 选项));
    • @sindrem 是的,它是一个身份验证流程,但不推荐。如果您仍想使用用户名和密码,您可以关注此Username/Password Doc,这是可以提供帮助的sample
    • 但我确实在最后一个短语中指定了我想使用 azure 广告登录,而不是用户名和密码。
    • @sindrem 我不好,请参考这个Doc,它告诉你可以使用哪个流程,根据要求。例如,交互式流程 - 通过浏览器或弹出窗口提示用户输入凭据 - 用于桌面应用程序和移动应用程序
    • 您好,如果发布的答案解决了您的问题,请单击复选标记将其标记为答案。这样做有助于其他人找到问题的答案。
    猜你喜欢
    • 2019-08-02
    • 2019-11-19
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 2020-08-17
    • 2021-10-15
    • 1970-01-01
    相关资源
    最近更新 更多