【问题标题】:Access the SharePoint API as a named user from an ASP.Net web application using Anonymous Access使用匿名访问从 ASP.Net Web 应用程序以指定用户身份访问 SharePoint API
【发布时间】:2011-03-18 14:20:35
【问题描述】:

这是场景: 我们有一个启用匿名访问的外部 SharePoint 实例。我们希望文档库向公众开放。我们不希望打开自定义列表。配置起来很简单。

现在我们想使用这些列表来创建一个有吸引力的外部 ASP.Net Web 应用程序。该网站也需要启用匿名功能。

问题是我们需要从 Web 应用程序访问这些列表,而不是打开它们以进行匿名访问。

我们希望使用 API(而不是 Web 服务),因为这将托管在同一个盒子上。

到目前为止,我们无法创建具有适当访问权限的 SPUser 来打开列表。

SPContext 为空。

这样做也会失败: SPSite temp = new SPSite(URL); SPUserToken 令牌 = temp.SystemAccount.UserToken;

SPSite 站点 = 新 SPSite(URL, 令牌); ...以用户身份做事。

RunWithElevatedPrivileges 也失败了。

请帮忙!

【问题讨论】:

    标签: sharepoint api


    【解决方案1】:

    您是否有机会使用 SharePoint 2010?他们有更多选项可用于从其他应用程序访问。如果不是 2010 年,您将不得不使用某种 Web 服务,无论是 OTB 服务,还是您自己的封装您的逻辑的 Web 服务,因为 SP OM 不会在非 SharePoint 机器上运行。

    除此之外,您可以尝试从应用程序池中获取 SPToken。本质上

    SPUserToken sysToken = SPContext.Current.Site.SystemAccount.UserToken;
    using(var systemSite = new SPSite(SPContext.Current.Site.ID, sysToken))
    

    Daniel Larson 非常支持这种方法,而不是使用 RunWithElevatedPriveleges。看看他的blog post

    【讨论】:

    • 不是 2010 年。我们是 2007 年。该应用程序将与 SharePoint 在同一个盒子上,这就是我们想要使用 API 的原因。上面的代码在第一行抛出了一个未设置为对象实例的对象引用。
    • 根据您执行代码的方式,可能不会设置 SPContext。您可能需要根据要加载的 URL 获取对网站集的引用。
    猜你喜欢
    • 2023-03-10
    • 2011-06-04
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    相关资源
    最近更新 更多