Анонимный доступ Sharepoint к папке макетов в анонимном веб-приложении

У меня есть сервер Sharepoint Foundation 2013 с развернутым веб-приложением, корневым семейством сайтов и другим семейством сайтов в этом веб-приложении. Веб-приложение настроено для анонимного доступа, второе семейство сайтов требует аутентификации Sharepoint (MS TMG).

У меня есть страницы приложений, которые развернуты на сервере (scope = 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 Он требует аутентификации и, конечно же, работает, когда я провожу аутентификацию.

Предложения? Требуется дополнительная информация?


person Colin Steel    schedule 10.10.2013    source источник


Ответы (2)


Если страницы вашего приложения должны быть доступны через анонимный доступ, ваши страницы должны унаследовать от Microsoft.SharePoint.WebControls.UnsecuredLayoutsPageBase вместо LayoutsPageBase.

См.: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.webcontrols.unsecuredlayoutspagebase.aspx

person Scott Brickey    schedule 10.10.2013
comment
Нет, все еще нужна авторизация - person Colin Steel; 10.10.2013
comment
У меня есть ситуация, когда он отлично работает на уровне корневого сайта (по общему признанию, я не использую анонимную аутентификацию, просто пытаюсь разрешить пользователям доступ к странице _layouts, даже если у них нет разрешения на доступ к остальной части сайта), но для вторичного сайта (свисающего с виртуальной папки / sites /) он отказывается работать, просто перенаправляется на страницу AccessDenied.aspx. Неужели никто не видел ничего подобного? Корневой сайт - это сайт группы, а вторичный сайт - из настраиваемого шаблона, но я не понимаю, почему это может иметь значение. - person Dylan Nicholson; 31.10.2013

Помимо ответа Колина действительно есть случай, когда вышеперечисленное не работает (SharePoint 2013 с SP 1).

  • Доступ к SharePoint осуществляется через проверку подлинности Windows.
  • Пользователь использует Chrome (моя версия 35) для доступа к странице.
  • Пользователь вышел из системы из другого браузера или вход в домен пользователя заблокирован.
  • Пользователь пытается получить доступ к анонимной странице.
  • Пользователь получает всплывающее окно входа в систему из Chrome.

Моим единственным обходным решением было создать модуль HTTP для удаления всех файлов cookie, включая WSS_KeepSessionAuthenticated cookie, в BeginRequest. Скорее всего, требуется только удаление 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);
            }
        }
    }
}

И, конечно же, зарегистрируйте его в соответствующем Web.config в c: \ inetpub \ wwwroot \ wss \ VirtualDirectories \ YOURAPPNAME:

<modules>
    <add name="YOURMODULENAME" type="YOURNAMESPACE.SPNoAuthModule, YOURASSSEMBLYNAME, Version=YOURVERSION, Culture=YOURCULTURE, PublicKeyToken=YOURKEYTOKEN" />
</modules>
person hammer7kg    schedule 02.06.2014
comment
Первоначально это было отправлено как редактирование моего ответа, однако, поскольку оно очень специфично, требует много дополнительной работы и, вероятно, вызывает другие проблемы для других разработок, оно было отклонено. - person Colin Steel; 04.06.2014