Sharepoint匿名访问匿名Web应用程序中的layouts文件夹

时间:2013-10-10 13:40:45

标签: sharepoint permissions sharepoint-2013

我有一个部署了Web应用程序的Sharepoint Foundation服务器2013,根网站集和此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 它需要身份验证,当然我提供身份验证时也可以使用。

连连呢?需要更多信息?

3 个答案:

答案 0 :(得分:3)

// This
public partial class DoWithComment : UnsecuredLayoutsPageBase
{
    // And this was required as well
    protected override bool AllowAnonymousAccess
    {
        get
        {
            return true;
        }
    }
}

答案 1 :(得分:1)

如果您的应用页面需要通过匿名访问方式访问,那么您的网页应该继承自Microsoft.SharePoint.WebControls.UnsecuredLayoutsPageBase而不是LayoutsPageBase

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

答案 2 :(得分:-1)

除了Colin的answer之外,确实存在上述情况不起作用的情况(带有SP 1的SharePoint 2013)。

  • 通过Windows身份验证访问SharePoint。
  • 用户使用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>
相关问题