SharePoint 2013: Opciones para “Iniciar sesión” con otro usuario!

Otro tema sobre el que últimamente me están preguntando bastante, y sobre todo en una formación realizada recientemente en el que me preguntaron que opciones había para poder incluir la clásica opción de inicio de sesión de usuario disponible en versiones previas de SharePoint y que con la versión 2013 ha desparecido. En este post os voy a comentar las distintas opciones que he ido probando y recopilando:

  • Opción 1: Navegando a la página de Layouts que se encarga de permitir el inicio de sesión con otro usuario: http://SiteUrl/_layouts/closeConnection.aspx?loginasanotheruser=true (Detalles de esta opción: http://support.microsoft.com/kb/2752600/es). El problema de esta aproximación es que no tiene en cuenta el sitio desde el que se hace la petición (luego entenderéis por donde va este comentario) de inicio de sesión con otro usuario por lo que una vez cambiadas las credenciales os encontraréis conque en lugar de permanecer en el mismo sitio, accederéis al sitio raíz de la colección.
  • Opción 2: Añadiendo la opción de Sign In as different user tal y como se explica en distintos artículos en la red como por ejemplo:        http://nickgrattan.wordpress.com/2012/07/23/sign-in-as-different-user-and-sharepoint-2013/. El paso a paso consiste en:
    • Editar el control Welcome.ascx (\15\TEMPLATE\CONTROLTEMPLATES\Welcome.ascx)
    • Añadir antes del elemento con ID  “ID_RequestAccess” lo siguiente:
   1: <SharePoint:MenuItemTemplate runat="server" ID="ID_LoginAsDifferentUser" 

   2:      Text="<%$Resources:wss,personalactions_loginasdifferentuser%>" 

   3:      Description="<%$Resources:wss,personalactions_loginasdifferentuserdescription%>" 

   4:      MenuGroupId="100" 

   5:      Sequence="100" 

   6:      UseShortId="true"/>

    • La pega de esta aproximación es que no es una buena práctica porque estamos personalizando un control de SharePoint disponible en la instalación por defecto y eso no se debe hacer además de que cualquier actualización o Service Pack nos puede romper la actualización.
  • Opción 3: Mediante código JavaScript que realice la llamada a la página de cambio de usuario logado.  Este código lo tendréis que añadir en una Web Part de tipo Editor de Contenido (En una de Secuencia de Comandos no funcionará). Ejemplos de llamadas que os sirven, y que tienen la pega vista en la Opción 1 son:

   1: <a href="javascript:window.location.href='http://'+window.location.host+'/_layouts/closeConnection.aspx?loginasanotheruser=true';">Iniciar Sesión con otro usuario</a> 

   2:         <a href="javascript:window.location.href='http://'+window.location.host+'/_layouts/closeConnection.aspx?loginasanotheruser=true';">Iniciar Sesión con otro usuario</a>

   3: <a href="/_layouts/closeConnection.aspx?loginasanotheruser=true">Iniciar Sesión con otro usuario</a> 

  • Opción 4: Que es la opción recomendada y que consiste en extender el menú de usuario con una feature siguiendo este paso a paso que he he localizado para SharePoint 2007 y que vale para SharePoint 2013: http://www.codeproject.com/Articles/138547/How-to-edit-the-Welcome-drop-down-menu-in-Sharepoi. Lo que tenéis que hacer es lo siguiente:
    • En Visual Studio 2013 crear un proyecto de tipo vacío para SharePoint 2013.
    • Añadir al proyecto un elemento de tipo “Elemento vacío” en el que añadiréis el siguiente XML en el que tenéis distintas posibilidades para añadir la opción de Iniciar sesión como un usuario distinto. Fijaros que en este caso no tengo el problema de indicar el origen de la petición de cambio de usuario gracias al uso del token {source}. Fijaros también que estoy usando distintos tokens para determinar la Url del sitio actual: ~site,{SiteUrl},~layouts (http://msdn.microsoft.com/en-us/library/office/ms431831(v=office.15).aspx).
   1: <?xml version="1.0" encoding="utf-8"?> 

   2: <Elements xmlns="http://schemas.microsoft.com/sharepoint/"> 

   3:   <CustomAction 

   4:         Id ="ITP.PersonalActions.SignOut" 

   5:         GroupId="PersonalActions" 

   6:         Location="Microsoft.SharePoint.StandardMenu" 

   7:         Sequence="1000" 

   8:         Title="SignOut" 

   9:         Description="SignOut Custom Action" 

  10:         ImageUrl="_layouts/images/icon_contactlist.gif"> 

  11:     <UrlAction Url="~site/_layouts/closeConnection.aspx?loginasanotheruser=true&amp;Source={Source}"/> 

  12:   </CustomAction> 

  13:   <CustomAction 

  14:         Id ="ITP.PersonalActions.SignOut_2" 

  15:         GroupId="PersonalActions" 

  16:         Location="Microsoft.SharePoint.StandardMenu" 

  17:         Sequence="1001" 

  18:         Title="SignOut (2)" 

  19:         Description="SignOut Custom Action" 

  20:         ImageUrl="_layouts/images/icon_contactlist.gif"> 

  21:     <UrlAction Url="javascript:window.location.href= '{SiteUrl}/_layouts/closeConnection.aspx?loginasanotheruser=true&amp;Source={Source}'"/> 

  22:   </CustomAction> 

  23:   <CustomAction 

  24:         Id ="ITP.PersonalActions.SignOut_3" 

  25:         GroupId="PersonalActions" 

  26:         Location="Microsoft.SharePoint.StandardMenu" 

  27:         Sequence="1002" 

  28:         Title="SignOut (3)" 

  29:         Description="SignOut Custom Action" 

  30:         ImageUrl="_layouts/images/icon_contactlist.gif"> 

  31:     <UrlAction Url="~layouts/closeConnection.aspx?loginasanotheruser=true&amp;Source={Source}"/> 

  32:   </CustomAction> 

  33: </Elements> 

  • Opción 5: Crear un control personalizado que encajemos en la página maestra del sitio.