понедельник, 2 декабря 2013 г.

Как зайти в SharePoint под другим пользователем?

В SharePoint 2013 отсутствует пункт меню "Войти под другим пользователем" (Sign in as Different User). Это вносит определённый дискомфорт во время создания решений для SharePoint. У разработчика очень часто возникает необходимость разлогиниться и залогиниться вновь уже под другим пользователями, чтобы проверить работу того или иного компонента.

Почему эту замечательную функцию исключили из SharePoint 2013? На этот счёт "в интернетах" говорят, что функция "Sign in as Different User" по сути не выполняет ту защитную функцию, которую ожидает получить от неё пользователь. Она скорее предназначена для использования теми пользователями, которые имеют два и более аккаунта в AD.

Дело в том, что когда пользователь вызывает функцию "Sign in as Different User", то в результате он может получить некоторые неприятные артефакты. 

Common problems are
  • Documents opened in external applications are saved with an unexpected user account because the external application runs under the windows account logged in to the machine and not the account you have chosen in SharePoint
  • Page content shows information from the previous user due to cached information
  • Session variables contain information from previous user as the cookies are not cleared
  • ...


Это неприятно, но не так страшно, если под разными аккаунтами входит фактически один и тот же человек. Однако с точки зрения обеспечения безопасности, это не лучший вариант.

Если вы хотите гарантировано добиться того, чтобы один пользователь НЕ видел данные другого пользователя, то вы должны выполнять  logoff/logon в Windows. Это особенно актуально в корпоративной среде, где люди преимущественно используют браузер IE, который как правило прозрачно выполняет авторизацию пользователя в SharePoint, используя для этого его текущую учётную запись Windows.

Если вы всё же решились использовать в своей работе возможность "Sign in as Different User", то её можно реализовать одним из следующих способов.

Использование URL-ссылки

Для того, чтобы зайти на сайт под другим пользователем, достаточно добавить в конец Url-ссылки на ваш сайт,следующую строчку:



/_layouts/closeConnection.aspx?loginasanotheruser=true



В результате вы должны получить следующую Url-ссылку:

, где <site_url> - это адрес вашего сайта (SPSite или SPWeb)

После перехода по этой ссылке текущий пользователь будет разлогинен, а вам будет предложено вновь ввести логин и пароль.


Однако каждый раз вводить URL руками не очень удобно.

Использование "Run as different user" с браузером IE.

Как известно, браузер IE использует учётную запись текущего пользователя Windows для прозрачной авторизации пользователя на сайте SharePoint.
Однако, у нас есть возможность запустить браузер IE от имени иной учётной записи (на рисунке, это команда "Run as different user")! Таким образом, когда мы зайдём на сайт SharePoint, то IE автоматически авторизует нас под иным пользователем, который отличается от нашего текущего пользователя Windows.


Возвращение пункта меню "Sign in as Different User", путём модификации файлов SharePoint.

Я не могу назвать это способ "кошерным", так как мы вносим изменения непосредственно в файлы SharePoint на сервере, что нельзя назвать хорошей идей. Однако этот способ прост и эффективен. Им можно пользоваться, если нужно чтобы пункт меню "Sign in as Different User" появился сразу на всех сайтах фермы SharePoint. Поэтому, Я рекомендую использовать данный способ на разработческой ферме.

Для этого откроем файл: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\TEMPLATE\CONTROLTEMPLATES\Welcome.ascx (Предварительно создав его копию!)


Добавляем следующую разметку перед существующим элементом  "ID_RequestAccess".

<SharePoint:MenuItemTemplate
runat="server"
ID="ID_LoginAsDifferentUser" 
Text="<%$Resources:wss,personalactions_loginasdifferentuser%>"  
Description="<%$Resources:wss,personalactions_loginasdifferentuserdescription%>"  
MenuGroupId="100"   Sequence="100"   UseShortId="true"   />

В результате получим примерно следующее:



И, Вуаля!


Теперь на всех сайтах фермы мы получили необходимый пункт меню "Войти в качестве другого пользователя"

Создание Custom Action аналогичного "Sign in as Different User"

Практически все пункт, куда можно "всунуть" своё меню, можно найти на MSDN в статье
Default Custom Action Locations and IDs (http://msdn.microsoft.com/en-us/library/bb802730.aspx)

Но иногда встречаются и не задокументированные группы и локэйшины, которые можно использовать в своих целях!

Например, группа GroupId="PersonalActions"  расположенная в  Location="Microsoft.SharePoint.StandardMenu" позволяет добавить свой пункт меню в меню пользователя.
В качестве UrlAction для этого пункта меню можно использовать не без известную уже нам ссылку:
 /_layouts/closeConnection.aspx?loginasanotheruser=true