El monstruito no soy yo, es el SharePoint

El Blog de Luis Mañez, dedicado a tecnologías MS, principalmente SharePoint y Office 365

SharePoint 2010: Configurar app web con 2 zonas, una con acceso anónimo mediante script Power-Shell

El siguiente post pretende solucionar una caso de uso típico cuando se construyen sitios públicos en SharePoint.

Si tenemos un sitio público, obviamente tendremos que habilitar el acceso al usuario anónimo. Si lo hacemos, seguramente querremos ocultar la Ribbon de alguna forma, para que el usuario anónimo no vea ningún enlace de “Sign in”.

Pero entonces, ¿Cómo hacemos para que los usuario editores del portal, puedan acceder a la configuración del sitio, crear páginas, etc?

Pues bien, probablemente lo más rápido y sencillo sea decirle al usuario que acceda a una URL específica, protegida, que solicite autenticación al usuario, por ejm:

http://www.contoso.com/_layouts/settings.aspx

Pero la verdad es que no queda muy elegante… y SharePoint tiene mucha clase!! Sonrisa

Otra solución algo más elegante, es hacer uso de las Zonas de SharePoint y sus Authentication Providers.

La idea es que la zona Default, esté configurada para que permita el acceso anónimo. Esta zona responderá al host hearder http://www.contoso.com. A esta url accederá el usuario anónimo.

A continuación, extendemos la aplicación web, creamos la zona “Intranet” y hacemos que responda al host header: http://authoring.contoso.com

Los usuarios administradores y editores, accederán por la parte de Authoring, donde el sistema les solicitará credenciales, y, si hemos ocultado la Ribbon usando la técnica que nos cuenta el gran Santi en este post, tendremos la Ribbon para el usuario logado.

Hacer esto es muy sencillo desde la interfaz de la administración central. Yo aquí os dejo un script Power-Shell para conseguir esta configuración. Como este script lo reutilizo en otros escenarios, este script NO crea la aplicación web con el usuario anónimo habilitado. En este link tenéis muy bien explicado cómo hacerlo desde la interfaz. Si queréis también podéis modificar el script para que el comando New-SPWebApplication especifique el parámetro AllowAnonymousAccess

Os dejo el script:

Primero definimos las variables según nuestro entorno

   1: # ******** Set variables for WebApp
   2: $WebAppName = "SharePoint - dpa.heroes.lab80"
   3: $WebAppHostHeader = "dpa.heroes.lab"
   4: $WebAppPort = 80
   5: $WebAppAppPool = "SharePoint - dpa AppPool"
   6: $WebAppAppPoolAccount = "HEROES\sp_apppool" # This User has to be a Sharepoint Manager Account
   7: $WebAppDatabaseName = "WSS_Content_DPA_LAB"
   8: $WebAppDatabaseServer = "Spiderman"
   9: # ******** Set variables for Site Collection
  10: $SiteCollectionName = "DPA desa"
  11: $SiteCollectionURL = ("http://" + $WebAppHostHeader)
  12: $SiteCollectionTemplate = "BLANKINTERNET#2" #see templates: https://www.nothingbutsharepoint.com/sites/devwiki/SP2010Dev/Pages/Site%20Templates%20in%20SharePoint%202010.aspx
  13: $SiteCollectionOwner = "HEROES\lmanez"
  14: #******** Set variables to Extend to Authoring site
  15: $authoringSiteName = "Sharepoint DPA Authoring"
  16: $authoringHostHeader = "authoringdpa.heroes.lab"
  17: $authoringPort = 80

A continuación un par de funciones para crear la aplicación web y la colección de sitios. OJO, el script detecta si ya existe la app web, y pregunta si se quiere re-crear.

   1: function CreateWebApplication([string]$WebAppName, [string]$WebAppHostHeader, $WebAppPort, [string]$WebAppAppPool, [string]$WebAppAppPoolAccount, 
   2:                                 [string]$WebAppDatabaseName, [string]$WebAppDatabaseServer)
   3: {
   4:     Write-Host "Checking SPWebApplication... $WebAppName"
   5:     $target = Get-SPWebApplication | Where {$_.Url -eq ("http://" + $WebAppHostHeader + "/")}
   6:     if ($target -ne $null)
   7:     {
   8:         Write-Host "Removing SPWebApplication..."
   9:         Remove-SPWebApplication ("http://" + $WebAppHostHeader) -DeleteIISSite 
  10:         #-RemoveContentDatabases
  11:         Start-Sleep 5
  12:         iisreset /noforce
  13:         Start-Sleep 5
  14:         Write-Host "SPWebApplication Removed"
  15:     }
  16:  
  17:     Write-Host "Creating SPWebApplication..."
  18:     New-SPWebApplication -Name $WebAppName -Port $WebAppPort -HostHeader $WebAppHostHeader -URL ("http://" + $WebAppHostHeader) -ApplicationPool $WebAppAppPool -ApplicationPoolAccount (Get-SPManagedAccount $WebAppAppPoolAccount) -DatabaseName $WebAppDatabaseName -DatabaseServer $WebAppDatabaseServer
  19:     Write-Host "SPWebApplication Created"
  20: }
  21:  
  22: function CreateSiteCollection([string]$SiteCollectionName, [string]$SiteCollectionURL, [string]$SiteCollectionTemplate, [string]$SiteCollectionOwner)
  23: {
  24:     # +++++++++++++ Create a new Sharepoint Site Collection
  25:     Write-Host "Creating SPSite..."
  26:     New-SPSite -URL $SiteCollectionURL -OwnerAlias $SiteCollectionOwner -Template $SiteCollectionTemplate -Name $SiteCollectionName
  27:     Write-Host "SPSite created"
  28: }

Finalmente, llamamos a las funciones y otros comandos Power-Shell:

   1: CreateWebApplication $WebAppName $WebAppHostHeader $WebAppPort $WebAppAppPool $WebAppAppPoolAccount $WebAppDatabaseName $WebAppDatabaseServer
   2: Write-Host "Web Application created succesfully" -ForegroundColor Green
   3: iisreset /noforce
   4: Start-Sleep 30
   5: Write-Host "IIS Restarted succesfully" -ForegroundColor Green
   6: CreateSiteCollection $SiteCollectionName $SiteCollectionURL $SiteCollectionTemplate $SiteCollectionOwner
   7: Start-Sleep 10
   8: iisreset /noforce
   9: Write-Host "Site collection created succesfully" -ForegroundColor Green
  10: Write-Host "Extending authoring..."
  11: Get-SPWebApplication -Identity ("http://" + $WebAppHostHeader) | New-SPWebApplicationExtension –Name $authoringSiteName -HostHeader $authoringHostHeader -Port $authoringPort -Zone Intranet -URL ("http://" + $authoringHostHeader)
  12: Write-Host "Authoring site extended" -ForegroundColor Green

Espero que os sirva.

Saludos!!

Posted: 4/7/2012 19:30 por Luis Mañez | con no comments
Comparte este post: