我有一个部署了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 它需要身份验证,当然我提供身份验证时也可以使用。
连连呢?需要更多信息?
答案 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
答案 2 :(得分:-1)
除了Colin的answer之外,确实存在上述情况不起作用的情况(带有SP 1的SharePoint 2013)。
我唯一的解决方法是创建一个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>