Configuración de la autenticación basada en notificaciones mediante Windows Live ID (SharePoint Server 2010)

 

Se aplica a: SharePoint Foundation 2010, SharePoint Server 2010

Última modificación del tema: 2016-11-30

La autenticación basada en notificaciones de Microsoft SharePoint Server 2010 puede delegar la autenticación al servicio de token de seguridad (STS) de Windows Live ID. Esto es importante si desea implementar un escenario en el que se use Windows Live ID para la administración de contraseñas. El servicio Windows Live ID está configurado como el proveedor de identidad de SharePoint Server 2010. Se ha establecido una relación de confianza unidireccional basada en certificados entre SharePoint Server 2010 y el servicio Windows Live ID. Cuando un usuario proporciona credenciales de Windows Live ID, el servicio Windows Live ID devuelve un PUID e información de correo electrónico encapsulados en un token de notificaciones del lenguaje de marcado de aserción de seguridad (SAML) versión 1.1. La clave pública de Windows Live ID, que forma parte del XML de metadatos de Windows Live ID, cifra este token de notificaciones.

Para obtener más información acerca de Windows Live ID, consulte los siguientes recursos:

La cookie de Windows Live ID se almacena en la memoria caché del equipo cliente y se envía a SharePoint Server 2010 por medio de una respuesta POST a una solicitud de autenticación correcta. SharePoint Server 2010 convierte el token de SAML de Windows Live ID en un token de SAML de SharePoint Server 2010. El PUID del usuario se genera en función de la notificación de nombre principal de usuario (UPN) devuelta en el token de SAML. Este valor se usa en todo SharePoint Server 2010 para identificar de forma exclusiva al usuario y llevar a cabo el control de acceso. SharePoint Server 2010 puede aumentar los tokens de usuario con notificaciones adicionales mediante un proveedor de notificaciones personalizado, que se configura en la aplicación web de SharePoint Server 2010. La cookie de SharePoint Server 2010 también se devuelve al equipo cliente y se almacena en caché para solicitudes posteriores. Cuando las cookies de Windows Live ID o SharePoint Server 2010 caducan o expiran, se redirige al usuario al servidor de Windows Live ID.

En este artículo:

  • Configuración del servicio de token de seguridad de Windows Live ID

  • Configuración de SharePoint para la autenticación de Windows Live ID

  • Conversión de un entorno interno de Windows Live ID en un entorno de producción

  • Creación de distintos tipos de aplicaciones web basadas en notificaciones de SharePoint

  • Concesión de permisos a todos los usuarios autenticados de Windows Live ID

Configuración del servicio de token de seguridad de Windows Live ID

El servicio Windows Live ID implementa el protocolo WS-Federation, el cual proporciona la infraestructura del STS de Live ID que se designa como proveedor de identidad de confianza. Puede extraer un certificado público de Windows Live ID de un nodo X509Certificate de un XML de metadatos y guardarlo en un certificado de seguridad de Internet con una extensión de archivo .cer. Si el XML de metadatos contiene varios nodos X509Certificate, puede usar cualquiera de ellos. Proporcione acceso de lectura a la cuenta de grupo de aplicaciones del conjunto o granja de servidores de SharePoint Server 2010 en el certificado de seguridad de Internet (archivo .cer).

Configure Microsoft Services Manager (MSM) mediante los siguientes valores:

Valor Descripción

Nombre de dominio

El nombre de dominio para el cual se generarán las solicitudes de autenticación al STS de Live ID. Use un nombre de dominio completo (FQDN).

Dirección URL de devolución predeterminada

La dirección URL a la cual el STS de Windows Live ID redirigirá al usuario si la autenticación se completa correctamente, por ejemplo: https://username.global.corp.contoso.com/_trust/default.aspx.

Nombre DNS

El identificador único proporcionado en una solicitud de autenticación al STS de Windows Live ID. Este identificador único habilita la funcionalidad de búsqueda para la dirección URL de devolución predeterminada. El nombre DNS debe coincidir con el valor de dominio especificado en la solicitud de autenticación de Windows Live ID.

Parámetro WRealm

El parámetro WRealm debe coincidir con el campo DNS en la configuración del sitio de MSM. El parámetro WRealm debe crearse mediante uno de los siguientes formatos: sub.domain.top o Urn:domain:name.

Directiva de invalidación de autenticación

Configure la directiva de invalidación de autenticación mediante el siguiente valor: MBI_FED_SSL.

Configuración de SharePoint para la autenticación de Windows Live ID

Use los procedimientos de esta sección para configurar SharePoint Server 2010 para la autenticación de Windows Live ID.

Para configurar SharePoint para la autenticación de Windows Live ID mediante Windows PowerShell

  1. Compruebe que cumple los siguientes requisitos mínimos: Consulte Add-SPShellAdmin.

  2. En el menú Inicio, haga clic en Todos los programas.

  3. Haga clic en Productos de Microsoft SharePoint 2010.

  4. Haga clic en Consola de administración de SharePoint 2010.

  5. En el símbolo del sistema de Windows PowerShell (es decir, PS C:\>), defina el valor de dominio de modo que coincida con el valor del nombre DNS especificado en Microsoft Services Manager. El valor de dominio de la integración de Windows Live ID debe coincidir con el nombre DNS correcto, como se muestra en el siguiente ejemplo:

    $realm = "urn:" + $env:ComputerName + ":ServerName"
    
  6. Para obtener el valor de PUID de la cuenta que usará como cuenta de administrador del conjunto o granja de servidores, en primer lugar debe iniciar sesión en el siguiente sitio web: Windows Live ID(https://accountservices.passport-int.net/?ru=https://accountservices.passport-int.net/Credentials.srf%3Fvv%3D750%26mkt%3DES-ES%26lc%3D3082\&vv=750\&mkt=ES-ES\&lc=3082\&id=10) y, a continuación, buscar el campo Unique ID en la página Credenciales.

  7. Especifique el valor de PUID mediante el siguiente formato: PUID@live.com.

  8. Busque uno de los nodos <X509Certificate> en el siguiente origen: dirección URL de XML de metadatos (https://nexus.passport-int.com/federationmetadata2/2007-06/federationmetadata.xml).

  9. Copie el contenido de cualquiera de los dos nodos X509Certificate, como se muestra en el ejemplo siguiente:

    MIICWzCCAcSgAwIBAgIJAJEzHoaEodSoMA0GCSqGSIb3DQEBBQUAMCkxJzAlBgNV
    BAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0wODEwMzAyMjA5
    MjNaFw0xMzEwMjkyMjA5MjNaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25p
    bmcgUHVibGljIEtleTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArz97XPae
    GNAC4UnKl5zReyhgk3Bzf08U+CgD0R9+GZOahmpakJXFpI213gQWiHrUGaMN9nsK
    4kzSfDPiquAMsV6vBYyWuPLZ0XrMzTAOV/WHSK3bCsYWWQZeH9Xn8G1Hkz+gQSC/
    92lBbq9oBCZfLv3OlkobOmT8d+ldRKGU4pUCAwEAAaOBijCBhzAdBgNVHQ4EFgQU
    VbJyIcGL0AjB4/Wm4DqUZux6uUkwWQYDVR0jBFIwUIAUVbJyIcGL0AjB4/Wm4DqU
    Zux6uUmhLaQrMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGlj
    IEtleYIJAJEzHoaEodSoMAsGA1UdDwQEAwIBxjANBgkqhkiG9w0BAQUFAAOBgQAO
    /5vGfu+Vg1TKBuxsAIMqjqKXX7aRrANNZM/5ACdwAUtMDG/n8INoXgOKr851fbF6
    4yBesmFjg2TbR8y0/ITAD+d+iyEpR7IO3/is9rWAj4ggbw8yqaDWn26eh3bAdoa+
    p38qtqJHkUGF5vApeHiu6zO573bKs+nXcKVM8mNbjA==
    
  10. Pegue el contenido de cualquiera de los nodos X509Certificate en un nuevo archivo de Bloc de notas y guarde el archivo con el siguiente nombre de archivo: LiveID-INT.cer.

  11. Configure el certificado de Windows Live ID (extraído del XML de metadatos), como se muestra en el ejemplo siguiente:

    $certloc = "C:\LiveIDWithSAML\LiveID-INT.cer"
    
  12. Defina una nueva entidad de certificación raíz de confianza en SharePoint Server 2010, como se muestra en el ejemplo siguiente:

    $rootcert = Get-PfxCertificate $certloc
    New-SPTrustedRootAuthority "NewRootAuthority" -Certificate $rootcert | Out-Null
    
  13. Cree un objeto con un certificado de Windows Live ID, como se muestra en el ejemplo siguiente:

    $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certloc)
    
  14. Defina la notificación que usará como identificador único del usuario. Asigne la notificación de UPN al nombre de notificación reservado Identifier. La notificación EmailAddress también se puede asignar, como se muestra en el ejemplo siguiente:

    $map1 = New-SPClaimTypeMapping -IncomingClaimType "https://schemas.xmlsoap.org/claims/EmailAddress" -IncomingClaimTypeDisplayName "https://schemas.xmlsoap.org/claims/EmailAddress" -SameAsIncoming
    $map2 = New-SPClaimTypeMapping -IncomingClaimType "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" -IncomingClaimTypeDisplayName "UPN" -LocalClaimType "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"
    
  15. Cree un nuevo proveedor de autenticación de SharePoint Server 2010 para una nueva aplicación web, como se muestra en el ejemplo siguiente:

    $apSAML = New-SPTrustedIdentityTokenIssuer -Name "LiveID" -Description "LiveID" -Realm $realm -ImportTrustCertificate $cert -ClaimsMappings $map1,$map2 -SignInUrl "https://login.live-int.com/login.srf" -IdentifierClaim "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"
    
  16. Cree una nueva aplicación web de SharePoint Server 2010 para usarla con el proveedor de autenticación creado en el paso anterior, como se muestra en el ejemplo siguiente:

    $waurl = https://" + $env:ComputerName - You might use FQDN url of your site here.
    $title = "Site Title"
    $waexe = New-SPWebApplication -Name $title -ApplicationPool $title -ApplicationPoolAccount $owner -Url $waurl -AuthenticationProvider
    $scexe = New-SPSite $siteurl -Name $title -Description $title -Template 'STS#1' -OwnerAlias
    
  17. Escriba INETMGR en el símbolo del sistema para iniciar el Administrador de IIS.

  18. Vaya al sitio de la aplicación web de notificaciones en IIS.

  19. En el panel izquierdo, haga clic con el botón secundario en la aplicación web de notificaciones y seleccione Modificar enlaces.

  20. Seleccione https y haga clic en Editar.

  21. En Certificado SSL, seleccione todos los certificados de la lista. Considere la posibilidad de usar un certificado autofirmado.

  22. Importe el certificado público de Windows Live ID en las carpetas Equipo local, SharePoint Server 2010 y Personas de confianza.

Conversión de un entorno interno de Windows Live ID en un entorno de producción

Use los procedimientos de esta sección para convertir un entorno interno de Windows Live ID en un entorno de producción.

Para convertir un entorno interno de Windows Live ID en un entorno de producción

  1. Asegúrese de que el sitio se haya migrado a un entorno de producción en MSM y de que se hayan acatado las normas de cumplimiento. No es necesaria una revisión del cumplimiento si el entorno de Windows Live ID en MSM es interno.

  2. Asegúrese de que la directiva de autenticación del entorno de producción de Windows Live ID esté configurada con el siguiente valor: MBI_FED_SSL.

  3. Asegúrese de que el entorno de producción de Windows Live ID usa direcciones URL basadas en HTTPS, debido a que la directiva de autenticación del entorno de producción está configurada para transporte SSL. Los sitios del entorno de producción envían solicitudes POST a través de SSL a https://login.live.com/. En SPTrustedIdentityTokenIssuer hay un URI del proveedor que debe ser el URI de inicio de sesión en Live. Compruebe que este esté basado en HTTPS.

  4. Si el proveedor de notificaciones de Windows Live ID está configurado para usar una dirección de correo electrónico en lugar de un PUID, el sitio del entorno de producción debe estar en el grupo de directivas de Microsoft. Tenga en cuenta que este grupo de directivas se aprueba automáticamente para los asociados internos y se requiere una aprobación explícita para los asociados externos.

Creación de distintos tipos de aplicaciones web basadas en notificaciones de SharePoint

Realice los procedimientos de esta sección para ejecutar un script de Windows PowerShell para crear distintos tipos de aplicaciones web basadas en notificaciones de SharePoint Server 2010.

Para crear distintos tipos de aplicaciones web basadas en notificaciones de SharePoint mediante Windows PowerShell

  1. Compruebe que cumple los siguientes requisitos mínimos: Consulte Add-SPShellAdmin.

  2. En el menú Inicio, haga clic en Todos los programas.

  3. Haga clic en Productos de Microsoft SharePoint 2010.

  4. Haga clic en Consola de administración de SharePoint 2010.

  5. Desde el símbolo del sistema de Windows PowerShell, ejecute el script DeployLiveIdWithSAML, tal como se muestra en el ejemplo siguiente:

    #.SYNOPSIS
    #    Script for creating different types of claims web applications from the Windows PowerShell command line.
    #.DESCRIPTION
    #    Script will create ANON, WIN, FBA, MULTI, MIXED, SAML and combinations of these web applications.
    #.NOTES
    #    Script: ClaimsWA.ps1
    #    Remark: The script will load/unload additional snap-ins depending on where it's being executed from.
    #    Update: 1/15/2010 (v2.0)
    #.PARAMETER type
    #   Indicates the type of claims web app to create (see examples for full list of valid supported types)
    #If not specified, this will default to ALL and each of the supported types of claims web apps will be created
    #.PARAMETER port
    #   Indicates the port number to create the web app on (See reserved ports at https://support.microsoft.com/kb/832017/es-es)
    #If not specified, this will default to port 201 and will be incremented in sequence for multiple web apps
    #.PARAMETER owner
    #   Indicates the domain account that will be used for App Pool (should be registered as a SharePoint Server managed account)
    #If not specified, this will default to logged on user and will use USERDOMAIN & USERNAME environment values
    #.EXAMPLE
    #   claimswa.ps1 WIN (create WIN-claims web app at port# 201 and use logged on user for app pool account)
    #   Here are some more examples of HOWTO use the script:
    #      claimswa.ps1 ANON (create ANON web app at port# 201)
    #      claimswa.ps1 ANON/FBA 701 (create ANON/FBA web app at port# 701)
    #      claimswa.ps1 FBA (create FBA web app at port# 201 using LDAP provider; default is REDMOND instance)
    #      claimswa.ps1 FBA/IBM (create FBA web app at port# 201 using LDAP provider pointing to the IBM instance)
    #      claimswa.ps1 FBA/SQL 851 (create forms-based authentication web app at port# 851 using SQL provider)
    #      claimswa.ps1 WIN/FBA/MIXED 501 (create Windows/forms-based authentication mixed-mode web apps at port# 501)
    #      claimswa.ps1 WIN/SAML/MULTI 901 (create Windows/SAML multi-auth web apps at port# 901)
    #   Here is the full list of all the support TYPEs (combine options delimited with slash for your config):
    #   Basic auth types:
    #      WIN   : create Windows claims web application on the port# specified on command line
    #      FBA   : create forms-based authentication claims web apps with the specified membership provider (SQL Server/LDAP listed below)
    #      SAML  : create SAML-claims web application on the default HTTPS port# 443
    #      ANON  : indicator switch for creating the web application to allow ANON mode
    #   Complex auth types:
    #      MULTI : create claims web application with multiple auth types using a single URL to access
    #      MIXED : create claims web application with multiple auth types using multiple URLs to access
    #   FBA membership/rolemanager providers
    #      RED   : use the REDMOND domain LDAP provider; this is the default setting if a provider is not specified
    #      SQL   : use the SQL Server provider for connecting to forms-based authentication web apps (connects to the ASPNETDB instance on ZADANG)
    #      PPL   : use the PEOPLEDC domain LDAP provider that is a private domain used for testing PEOPLE features
    #      SUN   : use the SUNOne LDAP provider in the PEOPLEDC domain which is used for profile import/sync testing
    #      IBM   : use the IBM LDAP provider in the PEOPLEDC domain which is used for profile import/sync testing
    #      NVL   : use the Novell LDAP provider in the PEOPLEDC domain which is used for profile import/sync testing
    
    # TODO (no specific ETA for these updates):
    #    1. Set the default IIS cert bindings for SAML web
    #    2. Use IIS CMDlets instead of updating XML object
    #    3. We should be able to define MixedMode base auth
    #    4. Use the domain for logged on user for LDAP string
    #    5. Do not attempt to write to CA/STS if running on WFE
    
    
    # Define the args list that we will accept & work with
    param ([string]$type, [int]$port, [string]$owner)
    
    function main() {
        # Valid options list
        $auths  = @("WIN", "FBA", "SAML", "ANON")
        $extnd  = @("MULTI", "MIXED")
        $provs  = @("SQL", "RED", "PPL", "SUN", "IBM", "NVL")
        $optns  = @("APP", "FIX")
        $typeOK = $true
    
        # Do we have the minimum args data before we can proceed
        # I'm not doing extensive validation but at least minimum
        foreach ($arg in $type.split("/")) {
            if (($auths+$extnd+$optns+$provs) -notcontains $arg) {
                write-host -Fore Red "`nInvalid TYPE argument was specified; execution aborted!`nTo see a list of valid TYPEs, execute with -examples option`n"
                $typeOK=$false; break
            }
        }
    
        if ($typeOK) {
            $type = @($type.toupper().split("/") | Sort | Get-Unique)
            switch ($type.count) {
                1 {
                    foreach ($arg in $type) {
                        if (($auths+$extnd+$optns) -notcontains $arg) {
                            write-host -Fore Red "`nInvalid AUTH argument was specified; execution aborted!`nTo see a list of valid AUTHs, execute with -examples option`n"
                            $typeOK=$false; break
                        }
                    }
                    if (($type -eq "MULTI") -or ($type -eq "MIXED")) {
                        $type += @("WIN", "FBA"); write-host -Fore Yellow "MULTI/MIXED auth combo not specified; defaulting to $type"
                    }
                    if ($type -eq "ANON") {
                        $type += @("WIN"); write-host -Fore Yellow "ANON auth combo not specified; defaulting to $type"
                    }
                }
    
                2 {
                    if ($type -contains "ANON") {
                        foreach ($arg in $type) {
                            if ($auths -notcontains $arg) {
                                write-host -Fore Red "`nInvalid ANON combo was specified; execution aborted!`nTo see a list of valid PROVIDERs, execute with -examples option`n"
                                $typeOK=$false; break
                            }
                        }
                    }
                    else {
                        $multiOK=$true
                        foreach ($arg in $type) {
                            if ($auth -notcontains $arg) {
                                $multiOK=$false; break
                            }
                        }
                        if ($multiOK) {$type += @("MULTI"); write-host -Fore Yellow "Multiple auth types specified; defaulting to $type"}
                    }
                }
            }
    
            if (($type -contains "MULTI") -or ($type -contains "MIXED") -and ($type.count -lt 3)) {
                write-host -Fore Red "`nMULTI/MIXED option requires 2 base auth types be specified!`nTo see a list of valid TYPEs, execute with -examples option`n"
                $typeOK=$false
            }
        }
    
        if ($typeOK) {
            # We seem to have the TYPE argument, let's check the others
    
            if (-not $port) {
                if ($type -contains "SAML") {$port=443} else {$port=201}
                write-host -Fore Yellow "PORT not specified; defaulting to $port"
            }
    
            if (-not $owner) {
                $owner = $env:UserDomain + "\" + $env:UserName.tolower()
                write-host -Fore Yellow "OWNER not specified; defaulting to $owner"
            }
    
            #In case somebody attempts to execute this script in the regular PS/ISE console,
            #let's load the IIS/SP snap-in to ensure we have everything we need to work with
            Manage-SnapIns (1)
    
            # check what flavor of SERVER we're running
            $product = Get-SPProduct | Where-Object {$_.ProductName.contains("SharePoint Server 2010")};
            if ($product.ProductName.contains("Debug")) {$flavor="DEBUG"} else {$flavor="SHIP"}
            write-host -Fore Green "Detected $flavor flavor of MOSS installed on this farm!"
    
            if ($type -contains "APP") {
                Write-WEBConfigs 0 "APP"
            }
            elseif ($type -contains "FIX") {
                Fix-Environment
            }
            else {
                Create-WebApp $type $port
            }
    
            # We're done with the snap-ins, so let's unload them
            Manage-SnapIns (0)
        }
    }
    
    function Fix-Environment {
        # This is just a series of steps to clean up
        # Not recommended to use unless you know why!
        Remove-SPTrustedRootAuthority NewRootAuthority
        Remove-SPTrustedIdentityTokenIssuer ServerName
    
        # I need to add the other clean up stuff here...
    }
    
    # This is the core script block that creates the different web apps
    function Create-WebApp ([string]$type, [int]$port) {
        $waurl = http://" + $env:ComputerName
    
        if ($type.contains("SAML")) { $waurl = $waurl.replace("http", "https") }
        $siteurl = $waurl + ":" + $port
        $title = "ClaimsWA-$port-" + $type.replace(" ","-")
    
        # Let's construct the WA/SC CMDlet call that we'll invoke later
        $waexe = "New-SPWebApplication -Name $title -ApplicationPool $title -ApplicationPoolAccount $owner -Url $waurl -AuthenticationProvider"
        $scexe = "New-SPSite $siteurl -Name $title -Description $title -Template 'STS#1' -OwnerAlias"
    
        write-host -Fore Cyan "`nSetting up $title on port $port now:"
    
        if ($type.contains("WIN")) {
            $apWIN = New-SPAuthenticationProvider -DisableKerberos:$true
            $cpWIN = New-SPClaimsPrincipal -Identity $owner -IdentityType 1
        }
    
        if ($type.contains("FBA")) {
            if ($type.contains("SQL")) {
                $membership="SQLms"; $rolemanager="SQLrm"; $identity = "sqlms:user1"
            }
            elseif ($type.contains("PPL")) {
                $membership="PPLms"; $rolemanager="PPLrm"; $identity = "pplms:fbauser1"
            }
            elseif ($type.contains("SUN")) {
                $membership="SUNms"; $rolemanager="SUNrm"; $identity = "sunms:fbauser1"
            }
            elseif ($type.contains("IBM")) {
                $membership="IBMms"; $rolemanager="IBMrm"; $identity = "ibmms:fbauser1"
            }
            elseif ($type.contains("NVL")) {
                $membership="NVLms"; $rolemanager="NVLrm"; $identity = "nvlms:fbauser1"
            }
            else {
                $membership="REDms"; $rolemanager="REDrm"; $identity = ("redms:$env:UserName").tolower()
            }
    
            $apFBA = New-SPAuthenticationProvider -ASPNETMembershipProvider $membership -ASPNETRoleProviderName $rolemanager;
            $cpFBA = New-SPClaimsPrincipal -Identity $identity -IdentityType 4
        }
    
        if ($type.contains("SAML")) {                
            $realm = "urn:" + $env:ComputerName + ":ServerName"
            $user  = "000300008448E34D@live.com" 
            $certloc = "C:\LiveIDWithSAML\LiveID-INT.cer"
    
            $rootcert = Get-PfxCertificate $certloc
            New-SPTrustedRootAuthority "NewRootAuthority" -Certificate $rootcert | Out-Null
    
           $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certloc)
           $map1 = New-SPClaimTypeMapping -IncomingClaimType "https://schemas.xmlsoap.org/claims/EmailAddress" -IncomingClaimTypeDisplayName "https://schemas.xmlsoap.org/claims/EmailAddress" -SameAsIncoming
           $map2 = New-SPClaimTypeMapping -IncomingClaimType "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" -IncomingClaimTypeDisplayName "UPN" -LocalClaimType "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"
    
           $apSAML = New-SPTrustedIdentityTokenIssuer -Name "LiveID" -Description "LiveID" -Realm $realm -ImportTrustCertificate $cert -ClaimsMappings $map1,$map2 -SignInUrl "https://login.live-int.com/login.srf" -IdentifierClaim "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"
           $cpSAML = New-SPClaimsPrincipal -TrustedIdentityTokenIssuer $apSAML -Identity $user.tolower()
        }
    
        if ($type.contains("WIN")) {
            $waexe += " `$apWIN"; $scexe += " `$cpWIN.ToEncodedString()"
        }
        elseif ($type.contains("FBA")) {
            $waexe += " `$apFBA"; $scexe += " `$cpFBA.ToEncodedString()"
        }
        else {
            $waexe += " `$apSAML -SecureSocketsLayer"; $scexe += " `$cpSAML.ToEncodedString()"
        }
    
        if ($type.contains("MULTI")) {
            if ($type.contains("WIN")) {
                if ($type.contains("FBA")) {
                    $waexe += ",`$apFBA"; $scexe += " -SecondaryOwnerAlias `$cpFBA.ToEncodedString()"
                }
                if ($type.contains("SAML")) {
                    $waexe += ",`$apSAML -SecureSocketsLayer"; if (!$scexe.contains("Secondary")) { $scexe += " -SecondaryOwnerAlias `$cpSAML.ToEncodedString()" }
                }
            }
            else {
                $waexe += ",`$apSAML -SecureSocketsLayer"; $scexe += " -SecondaryOwnerAlias `$cpSAML.ToEncodedString()"
            }
        }
    
        # Check if we're creating the ANON web apps
        if ($type.contains("ANON")) { $waexe += " -AllowAnonymousAccess" }
    
        $waexe += " -Port $port | Out-Null"; $scexe += " | Out-Null"
    
        write-host -Fore Cyan "Deploying app..." -noNewLine
        Invoke-Expression $waexe
    
        # We could do this with a simple if/else but there may be other auth types too
        if ($type.contains("WIN"))  { Create-UserPolicy $siteurl $cpWIN.ToEncodedString()  }
        if ($type.contains("FBA"))  { Create-UserPolicy $siteurl $cpFBA.ToEncodedString()  }
        if ($type.contains("SAML")) { Create-UserPolicy $siteurl $cpSAML.ToEncodedString() }
    
        write-host -Fore Cyan "Creating site..." -noNewLine
        Invoke-Expression $scexe
    
        # If this is the ANON web app, then set the root site access to entire web
        if ($type.contains("ANON")) { $web = Get-SPWeb $siteurl; $web.AnonymousState="On"; $web.Update() }
    
        # At this time, let's also check if it's going to be a MixedMode web app
        if ($type.contains("MIXED")) {
            # If it's a Mixed-Mode web app we need to extend the base app to another auth type too
            $port++; write-host -Fore Cyan "Extending port $port..." -noNewLine
            $waurl = $waurl.replace("https", "http")
            $waexe = "Get-SPWebApplication $siteurl | New-SPWebApplicationExtension -Name $title-Ext -Zone `"Intranet`" -URL $waurl -Port $port -AuthenticationProvider"
            if ($type.contains("WIN")) {
                if ($type.contains("FBA")) { $waexe += " `$apFBA" } else { $waexe += " `$apSAML" }
            }
            else {
                $waexe += " `$apSAML"
            }
            Invoke-Expression $waexe
        }
    
        # If we've created a FBA web app, then it's time to update the CA/STS/FBA web.config files
        if ($type.contains("FBA")) { Write-WEBConfigs 0 $port.tostring() }; write-host -Fore Cyan "done!"
    }
    
    function Create-UserPolicy ([string]$weburl, [string]$encodeduser) {
        $webapp = Get-SPWebApplication $weburl
        $policy = $webapp.Policies.Add($encodeduser, "ClaimsWA.ps1 User")
        $role = $webapp.PolicyRoles.GetSpecialRole([Microsoft.SharePoint.Administration.SPPolicyRoleType]::FullControl)
        $policy.PolicyRoleBindings.Add($role)
        $webapp.Update()
    }
    
    function Write-WEBConfigs ([int]$begin, [string]$vroot) {
        # For now I'm using the XML object to load/save the config files
        # Eventually we should use the IIS:CMDlets from WebAdministration
    
        write-host -Fore Cyan "Writing WEBConfig..." -noNewLine
        #$filei = "\\back\scratch\suntoshs\backup\webconfigs.xml"
        $filei = "\\back\scratch\suntoshs\scripts\oobinstall\webconfigs.xml"
    
        $xmli = [xml](get-content $filei)
        $root = $xmli.get_DocumentElement()
    
        for ($j=$begin; $j -le 2; $j++) {
            if ($j -eq 0) {
                [void][reflection.assembly]::LoadWithPartialName("Microsoft.SharePoint")
                $fileo = [Microsoft.SharePoint.Administration.SPAdministrationWebApplication]::Local.IisSettings.get_Item(0).Path.FullName + "\web.config"
            }
            elseif ($j -eq 1) {
                $fileo = $env:CommonProgramFiles + "\Microsoft Shared\Web Server Extensions\14\WebServices\SecurityToken\web.config"
                if ($flavor -eq "DEBUG") { $fileo = $fileo.replace("Shared", "Shared Debug") }
            }
            else {
                if ($vroot -ne "APP") { $fileo = $env:HomeDrive + "\inetpub\wwwroot\wss\VirtualDirectories\$vroot\web.config" }
            }
    
            $xmlo = [xml](get-content $fileo)
            $perf = $xmlo.CreateElement("clear")
    
            if ($flavor -eq "DEBUG") {
                $ship = $root.config[1].tokens.token[0].value
                $debug = $root.config[1].tokens.token[1].value
                $token = $root.config[0]["system.web"].membership.providers.add[0].type
                $root.config[0]["system.web"].membership.providers.add[0].SetAttribute("type", $token.replace($ship,$debug)) | Out-Null
                $token = $root.config[0]["system.web"].rolemanager.providers.add[0].type
                $root.config[0]["system.web"].rolemanager.providers.add[0].SetAttribute("type", $token.replace($ship,$debug)) | Out-Null
            }
    
            if ($j -eq 0) {
                # Update the CA web config
                if (-not $xmlo.SelectSingleNode("/configuration/connectionStrings")) {
                    $xmlo.configuration["system.web"].membership.ParentNode.RemoveChild($xmlo.configuration["system.web"].membership) | Out-Null
                    $xmlo.configuration["system.web"].roleManager.ParentNode.RemoveChild($xmlo.configuration["system.web"].roleManager) | Out-Null
                    $xmlo.SelectSingleNode("/configuration").AppendChild($xmlo.ImportNode($root.config[0]["connectionStrings"], $true)) | Out-Null
                    $xmlo.SelectSingleNode("/configuration/system.web").AppendChild($xmlo.ImportNode($root.config[0]["system.web"].membership, $true)) | Out-Null
                    $xmlo.SelectSingleNode("/configuration/system.web/membership/providers").PrependChild($xmlo.ImportNode($perf, $true)) | Out-Null
                    $xmlo.SelectSingleNode("/configuration/system.web").AppendChild($xmlo.ImportNode($root.config[0]["system.web"].rolemanager, $true)) | Out-Null
                    $xmlo.SelectSingleNode("/configuration/system.web/roleManager/providers").PrependChild($xmlo.ImportNode($perf, $true)) | Out-Null
                }
            }
            elseif ($j -eq 1) {
                # Update the STS web config
                if (-not $xmlo.SelectSingleNode("/configuration/system.web")) {
                    $xmlo.SelectSingleNode("/configuration").AppendChild($xmlo.ImportNode($root.config[0]["connectionStrings"], $true)) | Out-Null
                    $xmlo.SelectSingleNode("/configuration").AppendChild($xmlo.ImportNode($root.config[0]["system.web"], $true)) | Out-Null
                }
            }
            else {
                # Update the FBA web config
                if ($vroot -ne "APP") {
                    if ($type.contains("PPL")) {$provider=1} elseif ($type.contains("SUN")) {$provider=2} elseif ($type.contains("IBM")) {$provider=3} elseif ($type.contains("NVL")) {$provider=4} elseif ($type.contains("SQL")) {$provider=5} else {$provider=0}
                    $xmlo.SelectSingleNode("/configuration").AppendChild($xmlo.ImportNode($root.config[0]["connectionStrings"], $true)) | Out-Null
                    $xmlo.SelectSingleNode("/configuration/system.web/membership/providers").PrependChild($xmlo.ImportNode($root.config[0]["system.web"].membership.providers.add[$provider], $true)) | Out-Null
                    $xmlo.SelectSingleNode("/configuration/system.web/membership/providers").PrependChild($xmlo.ImportNode($perf, $true)) | Out-Null
                    $xmlo.SelectSingleNode("/configuration/system.web/roleManager/providers").PrependChild($xmlo.ImportNode($root.config[0]["system.web"].rolemanager.providers.add[$provider], $true)) | Out-Null
                    $xmlo.SelectSingleNode("/configuration/system.web/roleManager/providers").PrependChild($xmlo.ImportNode($perf, $true)) | Out-Null
                }
            }
            $xmlo.Save($fileo)
        }
    }
    
    function Manage-SnapIns ([int]$action) {
        #The OWSTimer process always causes an update conflict (known bug) while
        #creating multiple web apps; let's temporarily shut it down until we're done
    
        if ($action -eq 1) { Stop-Service "SPTimerV4" }
    
        # We need to do this only if we're running on ISE so check it
        if ($host.name.contains("ISE")) {
            if ($action -eq 1) {
                write-host -Fore Yellow "Detecting host and loading dependent snap-ins..."
                # Add-PSSnapIn WebAdministration (later!)
                Add-PSSnapIn Microsoft.Sharepoint.PowerShell
            }
            else {
                write-host -Fore Yellow "Unloading dependent snap-ins loaded earlier on..."
                # Remove-PSSnapIn WebAdministration (later!)
                Remove-PSSnapIn Microsoft.Sharepoint.PowerShell
            }
        }
        if ($action -eq 0) {Start-Service "SPTimerV4"; write-host -Fore Yellow "`nAll done; if there were errors please research PS database for known issues!`n"}
    }
    
    main
    
  6. Escriba INETMGR en el símbolo del sistema para iniciar el Administrador de IIS.

  7. Vaya al sitio de la aplicación web de notificaciones en IIS.

  8. En el panel izquierdo, haga clic con el botón secundario en la aplicación web de notificaciones y seleccione Modificar enlaces.

  9. Seleccione https y haga clic en Editar.

  10. En Certificado SSL, seleccione todos los certificados de la lista. Considere la posibilidad de usar un certificado autofirmado.

  11. Importe el certificado público de Windows Live ID en las carpetas Equipo local, SharePoint Server 2010 y Personas de confianza.

  12. Realice el restablecimiento de IIS y busque la dirección URL del sitio.

Concesión de permisos a todos los usuarios autenticados de Windows Live ID

Realice los procedimientos de esta sección para conceder permisos a todos los usuarios autenticados de Windows Live ID.

Para conceder permisos a todos los usuarios autenticados de Windows Live ID

  1. Busque el sitio de SharePoint Server 2010 que creó e inicie sesión con la cuenta de administrador.

  2. En el menú Acciones del sitio, haga clic en Configuración del sitio.

  3. En la sección Usuarios y permisos, haga clic en Permisos del sitio.

  4. Haga clic en el grupo Visitantes de nombreDelSitio, donde nombreDelSitio es el nombre del sitio.

  5. Haga clic en Nuevo y, a continuación, en Agregar usuarios.

  6. En la ventana Conceder permisos, haga clic en el icono de exploración.

  7. En la ventana Seleccionar personas y grupos, haga clic en Todos los usuarios y, a continuación, haga clic en Todos los usuarios (LiveIDSTS) en el panel derecho.

  8. Haga clic en Agregar.

  9. Haga clic en Aceptar.

  10. Compruebe que Todos los usuarios (LiveIDSTS) forma parte del grupo de visitantes. Ahora debería poder iniciar sesión en el sitio de SharePoint Server 2010 con las credenciales de cualquier otro usuario de Live ID.

Acerca del autor

Birendra Acharya es un ingeniero senior de diseño de software para MSIT en Microsoft.

See Also

Other Resources

Información sobre WS-Federation (https://go.microsoft.com/fwlink/?linkid=192377&clcid=0xC0A)