使用GetWebLoginClientContext时使用SharePoint Online进行身份验证时出现问题

问题描述 投票:0回答:1

我们在Azure上运行了一个ASP.NET MVC Web应用程序,我们希望在其上公开SharePoint Online租户的搜索结果。 Web应用程序中的用户在Azure AD上进行身份验证,我们希望他们自己搜索(保留其身份而不使用系统帐户),以便他们只能在搜索结果中看到与其相关的项目。我认为这是一个非常普遍的要求。

使用SharePointPnPCoreOnline CSOM扩展,我们能够检索搜索结果:

            var authManager = new OfficeDevPnP.Core.AuthenticationManager();
            ClientContext clientContext = authManager.GetWebLoginClientContext("https://xxxxxx.sharepoint.com");
            KeywordQuery keywordQuery = new KeywordQuery(clientContext);
            keywordQuery.QueryText = "queryText";
            SearchExecutor searchExecutor = new SearchExecutor(clientContext);
            ClientResult<ResultTableCollection> results = searchExecutor.ExecuteQuery(keywordQuery);
            clientContext.ExecuteQuery();

(GetWebLoginClientContext方法会弹出一个新窗口,如果用户凭据尚未经过身份验证,则会询问用户凭据。理想情况下,我们希望以静默方式完成此操作,但这是唯一可以实现的方法。)

在开发期间,一切正常 - 我们得到了预期的搜索结果。但是,一旦我们将Web应用程序发布到Azure,我们在尝试搜索时遇到以下错误:

502 - Web服务器在充当网关或代理服务器时收到无效响应。您正在查找的页面存在问题,无法显示。当Web服务器(充当网关或代理)与上游内容服务器联系时,它从内容服务器收到无效响应。

我们发现解决http 502错误的建议之一是清除浏览器缓存,但是在我们这样做之后它也不再适用于开发机器。弹出窗口现在只显示SharePoint Online租户主页而不显示任何登录提示,而不是显示请求用户凭据的弹出窗口。

有没有人对此有解释?

或者,如果没有,更好的方法是让用户在没有GetWebLoginClientContext方法显示的弹出窗口的情况下搜索SharePoint Online?

asp.net-mvc azure sharepoint-online csom
1个回答
0
投票

最终解决了这个问题,不是使用GetWebLoginClientContext方法(弹出窗口供用户输入凭据),而是使用GetAzureADWebApplicationAuthenticatedContext方法,该方法使用oauth访问令牌进行静默验证。问题是获取正确的令牌传递给方法,我们成功地通过使用MicrosoftGraphHelper.GetAccessTokenForCurrentUser(url)找到了here

© www.soinside.com 2019 - 2024. All rights reserved.