繁体   English   中英

是否可以使用Azure AD身份验证访问SharePoint Online数据?

[英]Is It Possible To Access SharePoint Online Data Using Azure AD Authentication?

我在Azure App Service和桌面应用程序( D1 )上托管了一个自定义安全API( API1 ),该应用程序可以访问自定义API( API1 )。

现在,我们需要从我们的自定义API( API1 )访问SharePoint Online数据。

使用相同的桌面应用程序( D1 )从Azure App Service上托管的自定义API访问SharePoint联机数据是否可行?

当然可以! 但是要求是您的目录中必须具有Sharepoint Online订阅。

如何 :

  1. 将您的应用程序与AAD集成

  2. 为您的应用程序添加Office 365 Sharepoint Online API访问权限。

  3. 为您的应用选择必要的权限。

在此处输入图片说明

感谢Yang,您的建议很有用。

我已经执行了相同的步骤,并使用了下面的代码,现在我可以使用Azure令牌从SPO网站获取数据。

 static void ConnectToSPO()
    {
        string SiteURL = "https://SPOSite.sharepoint.com/";

        #region Obtain token
        AuthenticationResult result = null;
        // first, try to get a token silently
        try
        {
            result = authContext.AcquireTokenSilentAsync(SiteURL, clientId).Result;
        }
        catch (AggregateException exc)
        {
            AdalException ex = exc.InnerException as AdalException;

            // There is no token in the cache; prompt the user to sign-in.
            if (ex != null && ex.ErrorCode != "failed_to_acquire_token_silently")
            {
                // An unexpected error occurred.
                ShowError(ex);
                return;
            }
        }

        if (result == null)
        {
            UserCredential uc = TextualPrompt();
            // if you want to use Windows integrated auth, comment the line above and uncomment the one below
            // UserCredential uc = new UserCredential();
            try
            {
                result = authContext.AcquireTokenAsync(todoListResourceId, clientId, uc).Result;
            }
            catch (Exception ee)
            {
                ShowError(ee);
                return;
            }
        }

        #endregion

        #region Get SharePoint Online Context & Access SPO Data

        using (ClientContext ctx = TokenHelper.GetClientContextWithAccessToken(SiteURL, result.AccessToken))
        {

            try
            {

                Console.ForegroundColor = ConsoleColor.Yellow;

                Console.WriteLine("");
                Console.WriteLine("*****************************************************************************");
                Console.WriteLine("Connecting To SPO Site: " + SiteURL);

                ctx.Load(ctx.Web);
                ctx.ExecuteQuery();
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("Connected !");

                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine("Info: Site Name-> " + ctx.Web.Title);

                ctx.Load(ctx.Web.CurrentUser);
                ctx.ExecuteQuery();
                Console.WriteLine("Info: Current User Login Name-> " + ctx.Web.CurrentUser.LoginName);

                #region Read List Items
                Console.WriteLine("");
                Console.WriteLine("Info: Reading list items from list Test List");

                List testlist = ctx.Web.Lists.GetByTitle("Test List");
                CamlQuery query = CamlQuery.CreateAllItemsQuery(100);
                ListItemCollection items = testlist.GetItems(query);
                ctx.Load(items);
                ctx.ExecuteQuery();
                foreach (ListItem listItem in items)
                {
                    // We have all the list item data. For example, Title. 
                    Console.WriteLine(listItem["Title"]);
                }

                Console.WriteLine("");
                #endregion
            }
            catch (Exception ex)
            {
                ShowError(ex);
            }
        } 
        #endregion
    }

请注意:

为了获取Azure的访问令牌,我使用了以下文章中的代码。

主动目录的dotnet本地,无头

以下是我遵循的步骤:

  1. 遵循了文章中提到的步骤

  2. 为该应用程序添加了Office 365 Sharepoint Online API访问权限。

  3. 为该应用选择了必要的权限。

  4. 并使用上述代码从SPO SIte检索数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM