2

我有一个 Sharepoint Foundation server 2013,其中部署了一个 Web 应用程序、一个根站点集合和此 Web 应用程序中的另一个站点集合。Web 应用程序配置为匿名访问,第二个网站集需要 Sharepoint 身份验证 (MS TMG)​​。

我有部署到服务器的应用程序页面(范围 = web),这些应用程序页面由用户在第二个网站集中使用,因此需要身份验证,这可以按需要工作。这些应用程序页面也必须可以匿名访问,它们当然位于_layouts文件夹中,因此包含在根站点集合_layout路径中,这部分不起作用。

我可以匿名访问根服务器地址https://myserver.mycompany.co.uk/ 映射到https://myserver.mycompany.co.uk/_layouts/15/start.aspx#/SitePages/Home.aspx是转映射到https://myserver.mycompany.co.uk/SitePages/Home.aspx)。但是,我无法匿名访问https://myserver.mycompany.co.uk/_layouts/15/mysite.ApplicationPages/MyPage.aspx?QueryString=etc 它需要身份验证,当我提供身份验证时当然可以工作。

建议?需要更多信息?

4

3 回答 3

3
// This
public partial class DoWithComment : UnsecuredLayoutsPageBase
{
    // And this was required as well
    protected override bool AllowAnonymousAccess
    {
        get
        {
            return true;
        }
    }
}
于 2013-10-10T14:00:37.153 回答
1

如果您的应用页面需要通过匿名访问进行访问,您的页面应继承自 Microsoft.SharePoint.WebControls.UnsecuredLayoutsPageBase 而不是 LayoutsPageBase

请参阅:http: //msdn.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.unsecuredlayoutspagebase.aspx

于 2013-10-10T13:46:26.527 回答
-1

除了 Colin 的回答之外,确实存在上述方法不起作用的情况(SharePoint 2013 with SP 1)。

  • SharePoint 通过 Windows 身份验证访问。
  • 用户使用 Chrome(我的版本是 35)访问页面。
  • 用户已从其他浏览器注销或用户的域登录被锁定。
  • 用户尝试访问匿名页面。
  • 用户从 Chrome 获取登录弹出窗口。

我唯一的解决方法是创建一个 HTTP 模块来删除所有 cookie,包括 BeginRequest 上的 WSS_KeepSessionAuthenticated cookie。很可能只需要删除 WSS_KeepSessionAuthenticated ,但我正在粘贴删除每个 cookie 的原始代码,因为这个问题很难重现。

public class SPNoAuthModule : IHttpModule
{
    public void Dispose(){ }

    public void Init(HttpApplication context)
    {
        context.BeginRequest+=context_BeginRequest;
    }

    private void context_BeginRequest(object sender, EventArgs e)
    {
        var app = (HttpApplication)sender;
        var context = app.Context;
        if (context.Request.FilePath.ToUpper().EndsWith("YOURPAGEADDRESS"))
        {
            var cookieNames = context.Request.Cookies.AllKeys;
            foreach (var cookieName in cookieNames)
            {
                context.Request.Cookies.Remove(cookieName);
            }
        }
    }
}

当然,在 c:\inetpub\wwwroot\wss\VirtualDirectories\YOURAPPNAME 的适当 Web.config 中注册它:

<modules>
    <add name="YOURMODULENAME" type="YOURNAMESPACE.SPNoAuthModule, YOURASSSEMBLYNAME, Version=YOURVERSION, Culture=YOURCULTURE, PublicKeyToken=YOURKEYTOKEN" />
</modules>
于 2014-06-02T14:41:28.240 回答