我们需要从 ASP.NET Web 应用程序连接到 SharePoint Online。为此,我们在 Azure AD 中注册了一个应用程序,并授予了
Sites.FullControl.All
应用程序权限,并添加了一个证书以从 ASP.NET 应用程序访问 Azure AD 应用程序。
在 ASP.NET Web 应用程序中,为了获取客户端上下文,我们使用了以下代码:
PnP.Framework.AuthenticationManager authManager = PnP.Framework.AuthenticationManager.CreateWithCertificate(clientID, certPhysicalPath, certPassword, tenantID);
var context = await authManager.GetContextAsync(siteURL);
我们在此处获得的上下文是仅应用程序上下文,如果我们在 SharePoint 列表中插入一个项目,则该项目的创建者将显示为“SharePoint 应用程序”。
我们尝试在同一应用程序中授予
AllSites.FullControl
的委派权限。但我们找不到任何选项来使用 PNP.Framework 创建用户特定的客户端上下文。
我们正在尝试通过使用 PNP.Framework 的 Web 登录方法来获取用户上下文。谁能给我们一些关于如何在 ASP.NET Web 应用程序中完成此操作的指示。
要使用 PnP.Framework 获取 ASP.NET Web 应用程序中的用户上下文,您可以使用 AuthenticationManager 类和 GetUserContext 方法,而不是 CreateWithCertificate 方法,后者用于仅应用程序身份验证。
这是实现用户上下文的通用方法:
使用 GetUserContext 方法:此方法允许您以交互方式对用户进行身份验证,这将为您提供用户上下文。
实现Web登录:您可以通过Web登录对话框提示用户登录。这通常涉及将用户重定向到 Azure AD 登录页面,然后处理回调以检索访问令牌。
示例代码:
using PnP.Framework;
using Microsoft.SharePoint.Client;
// Assuming you have the necessary parameters
string siteUrl = "https://yourtenant.sharepoint.com/sites/yoursite";
var authManager = new AuthenticationManager();
// Get user context
using (var context = authManager.GetUserContext(siteUrl))
{
// Now you can perform operations with the user context
context.Load(context.Web);
context.ExecuteQuery();
Console.WriteLine(context.Web.Title);
}