Diferencias
Muestra las diferencias entre dos versiones de la página.
— |
sso:manuales:office365 [2018/07/17 07:43] (actual) |
||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | ====== Integración con Office365 ====== | ||
+ | {{tag>saml2 manual desarrollador}} | ||
+ | |||
+ | [[https://azure.microsoft.com/|Azure Active Directory]][[https://azure.microsoft.com|{{fa>external-link|Ir al sitio}}]] es una solución en la nube global de administración de identidades de [[https://www.microsoft.com/es-es/|Microsoft]][[https://www.microsoft.com/es-es/|{{fa>external-link|Ir al sitio}}]]. Ayuda a proteger el acceso a aplicaciones locales y en la nube, incluidos los servicios en línea como [[https://products.office.com/es-ES/business/get-latest-office-365-for-your-business-with-2016-apps?WT.srch=1&wt.mc_id=AID522603_SEM_QpkistaC | Office 365 | ]][[ https://products.office.com/es-ES/business/get-latest-office-365-for-your-business-with-2016-apps?WT.srch=1&wt.mc_id=AID522603_SEM_QpkistaC|{{fa>external-link|Ir al sitio}}]]. | ||
+ | |||
+ | La integración de [[https://products.office.com/es-ES/business/get-latest-office-365-for-your-business-with-2016-apps?WT.srch=1&wt.mc_id=AID522603_SEM_QpkistaC | Office 365 | ]][[ https://products.office.com/es-ES/business/get-latest-office-365-for-your-business-with-2016-apps?WT.srch=1&wt.mc_id=AID522603_SEM_QpkistaC|{{fa>external-link|Ir al sitio}}]] con el proveedor de identidad de la [[http://www.uhu.es | Universidad de Huelva]] [[http://www.uhu.es|{{fa>external-link|Ir al sitio}}]] se realiza en dos fases: | ||
+ | |||
+ | - Federación del dominio en AzureAD | ||
+ | - Configurar el Idp de la Universidad de Huelva para proveer los atributos que necesita Office365 | ||
+ | - Provisión de usuarios | ||
+ | |||
+ | ===== Federación del dominio en AzureAD ===== | ||
+ | - En una máquinas windows instalamos la [[https://msdn.microsoft.com/es-es/powershell/scripting/setup/installing-windows-powershell | PowerShell]] [[https://msdn.microsoft.com/es-es/powershell/scripting/setup/installing-windows-powershell|{{fa>external-link|Ir al sitio}}]] y módulo para [[https://github.com/Azure/azure-powershell/releases | Azure AD]] [[https://github.com/Azure/azure-powershell/releases|{{fa>external-link|Ir al sitio}}]] | ||
+ | - Arrancamos el PowerShell y usamos el comando ''Connect-MsolService'' para conectarnos a AzureAD e introducimos las credenciales del administrador del AzureAD<code> | ||
+ | Connect-MsolService | ||
+ | </code> | ||
+ | - Usamos el comando ''New-MsolDomain'' para crear el nuevo dominio a federar, en este caso ''uhu.es'':<code> | ||
+ | New-MsolDomain -Name uhu.es -Authentication Federated</code> | ||
+ | - A continuación usamos el comando ''Get-MsolDomainVerificationDns'' para indicarle a AzureAD cómo queremos que compruebe el dominio. En nuestro caso será mediante [[http://www.zytrax.com/books/dns/ch8/txt.html | registros de texto]] (''-Mode DnsTxtRecord'') introducimos en el DNS responsable del dominio a federar: <code> | ||
+ | Get-MsolDomainVerificationDns -DomainName uhu.es -Mode DnsTxtRecord | ||
+ | </code> | ||
+ | - Como resultado, este comando nos devolverá el nombre del resgistro que tenemos que añadir, su valor y el TTL. | ||
+ | - Accedemos al [[http://portal.office365.com | portal de office 365]] como administrador. Nos posicionamos en la opción ''configuración'', ''dominios''. Pulsamos sobre el dominio creado: {{ http://i.imgur.com/8XEogtK.png }} | ||
+ | - En el paso ''comprobación del dominio'' pulsamos sobre el botón de ''confirmar''. {{ http://i.imgur.com/rVwmkFt.png }} | ||
+ | - Si todo ha salido bien pasará directamente a la pestaña configuración de los servicios. | ||
+ | - Desde la Powershell podemos comprobar que el dominio ya ha sido verificado ejecutamos lo que se indica a continuación y esperamos que el valor de **Status** sea ''verified'' y el del campo **Authentication** valga ''Managed'': <code> | ||
+ | Get-MsolDomain | ||
+ | </code> | ||
+ | - Antes de continuar, es necesario obetener los siguientes datos: | ||
+ | |||
+ | ^ Nombre ^ Descripción ^ Valor ^ | ||
+ | | DomainName | Nombre del dominio | uhu.es | | ||
+ | | FederationBrandName | some colspan (note the double pipe) | | | ||
+ | | MetadataExchangeUri | Uri para obtener los metadados del IDP | | | ||
+ | | ActiveLogOnUri | Uri para iniciar el proceso de logon pasivo | https://idpnew.uhu.es/idp/saml2/idp/SSOService.php | | ||
+ | | PassiveLogOnUri | Uri para iniciar el proceso de logon pasivo | https://idpnew.uhu.es/idp/saml2/idp/SSOService.php | | ||
+ | | SigningCertificate | Certificado para firmar las aserciones | | | ||
+ | | IssuerUri | EntityID de idp | https://idp.uhu.es/idp/ | | ||
+ | | LogOffUri | Uri para iniciar el proceso de logoff | https://idpnew.uhu.es/idp/saml2/idp/SingleLogoutService.php | | ||
+ | |PreferredAuthenticationProtocol | Protocolo para hacer la autentificación| SAMLP | | ||
+ | |||
+ | - A continuación usamos el comando ''Set-MsolDomainAuthentication'' para asociar los valores antes indicados a AzureAD <code> | ||
+ | $domainname = "uhu.es" | ||
+ | $logoffuri = "https://idpnew.uhu.es/idp/saml2/idp/SSOService.php" | ||
+ | $passivelogonuri = "https://idpnew.uhu.es/idp/saml2/idp/SingleLogoutService.php" | ||
+ | $cert = | ||
+ | $issueruri = "https://idp.uhu.es/idp" | ||
+ | $protocol = "SAMLP" | ||
+ | $metadataexchangeuri = | ||
+ | $brandname= | ||
+ | |||
+ | Set-MsolDomainAuthentication -DomainName $domainname -FederationBrandName $brandname -Authentication Federated -MetadataExchangeUri $metadataexchangeuri -ActiveLogOnUri $activelogonuri -PassiveLogOnUri $passi | ||
+ | velogonuri -SigningCertificate $cert -IssuerUri $issueruri -LogOffUri $logoffuri -PreferredAuthenticationProtocol $protocol | ||
+ | </code> | ||
+ | - Para comprobar que ya ha sido federado ponemos Get.MsolDomain y ebn el campo Authentication pondrá federated | ||
+ | |||
+ | ===== Configurar del Proveedor de Identidad ===== | ||
+ | |||
+ | El proveedor de identidad de la Universidad de Huelva se basa en SimpleSAMLphp. Los pasos que se han dado son: | ||
+ | |||
+ | - En el fichero ''config/config.uhu'' añadimos la localización de los metadatos de azuead <code> | ||
+ | 'metadata.sources' => array( | ||
+ | array('type' => 'flatfile'), | ||
+ | array('type' => 'flatfile', 'directory' => 'metadata/azuread'), | ||
+ | |||
+ | ), | ||
+ | </code> | ||
+ | - Configuramos el módulo metarefresh,''config/config_metarefresh'', para que obtenga periódicamente los metadatos de azuread. Estos datos se encuentran localizados en https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml <code> | ||
+ | 'azuread' => array( | ||
+ | 'cron' => array('daily'), | ||
+ | 'sources' => array( | ||
+ | array( | ||
+ | 'src' => 'https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml', | ||
+ | |||
+ | </code>. | ||
+ | - Según se indica en el apartado **Atributos requeridos** del documento[[https://msdn.microsoft.com/es-es/library/azure/dn641269.aspx | Utilizar un proveedor de identidad SAML 2.0 para implementar el inicio de sesión único]], limitaremos los atributos a mandar a ''Issuer'',''ImmutableID'' y ''IDPEmail'', estableceremos su formato a ''urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified'', marcaremos al atributo ''ImmutableID'' como NameID y estableceremos su formato a ''urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified'': <code> | ||
+ | 'attributes' => array ('Issuer','ImmutableID','IDPEmail'), | ||
+ | 'attributes.NameFormat' => 'urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified', | ||
+ | 'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', | ||
+ | 'simplesaml.nameidattribute' => 'ImmutableID', | ||
+ | </code> | ||
+ | - Indicaremos el algoritmo con el que se firmarán las aserciones, estableceremos que los logout deben ir firmados y que las aserciones no irán cifradas (tal y como se indica en el apartado Requisitos del bloque de firma del documento [[https://msdn.microsoft.com/es-es/library/azure/dn641269.aspx | Utilizar un proveedor de identidad SAML 2.0 para implementar el inicio de sesión único]]: <code> | ||
+ | 'signature.algorithm'=> 'http://www.w3.org/2000/09/xmldsig#rsa-sha1', | ||
+ | 'redirect.sign' => true, | ||
+ | 'redirect.validate' => false, | ||
+ | 'assertion.encryption' => false, </code> | ||
+ | - Por último usamos el ''authproc'' para establecer los filtros necesarios para obtener las atributos solicitados | ||
+ | - El fichero final sería: <code> | ||
+ | 'azuread' => array( | ||
+ | 'cron' => array('daily'), | ||
+ | 'sources' => array( | ||
+ | array( | ||
+ | 'src' => 'https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml', | ||
+ | 'template' => array( | ||
+ | 'tags' => array('azuread'), | ||
+ | 'attributes' => array ('Issuer','ImmutableID','IDPEmail'), | ||
+ | 'attributes.NameFormat' => 'urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified', | ||
+ | 'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent', | ||
+ | 'simplesaml.nameidattribute' => 'ImmutableID', | ||
+ | 'signature.algorithm'=> 'http://www.w3.org/2000/09/xmldsig#rsa-sha1', | ||
+ | 'redirect.sign' => true, | ||
+ | 'redirect.validate' => false, | ||
+ | 'assertion.encryption' => false, | ||
+ | 'authproc' => require(__DIR__ . '/rules/azuread/main.php'), | ||
+ | ), | ||
+ | ), | ||
+ | ), | ||
+ | |||
+ | 'expireAfter' => 60*60*24*2, // Maximum 2 days cache time. | ||
+ | 'outputDir' => 'metadata/azuread/', | ||
+ | 'outputFormat' => 'flatfile', | ||
+ | ), | ||
+ | |||
+ | </code> | ||
+ | - El ''InmutableID'' lo obtenemos a partir del atributo ''eduPersonPrincipalName'' de la siguiente forma<code> | ||
+ | return array( | ||
+ | 'class' => 'core:PHP', | ||
+ | 'code' => ' | ||
+ | | ||
+ | if (empty($attributes["eduPersonPrincipalName"]) || $attributes["eduPersonPrincipalName"][0] === FALSE) { | ||
+ | $mesg = "Error while provisioning InmutableID: eduPersonPrincipalName required, not presented"; | ||
+ | SimpleSAML_Logger::error($mesg); | ||
+ | throw new SimpleSAML_Error_Exception($mesg); | ||
+ | } | ||
+ | |||
+ | $eppn = $attributes["eduPersonPrincipalName"][0]; | ||
+ | $chunks = str_split(md5($eppn), 4); | ||
+ | $attributes["employeeNumber"][0] = vsprintf("%s%s-%s-%s-%s-%s%s%s", $chunks); | ||
+ | ', | ||
+ | ); | ||
+ | </code> | ||
+ | |||
+ | ===== Provisión de usuarios shadow en AzureAD ===== | ||
+ | |||
+ | Una vez federado el dominio y configurado nuestro Idp, pasamos a crear cuentas en AzureAD para comprobar que todo funciona correctamente. | ||
+ | - Creamos la cuenta del usuario prueba@uhu.es ponemos: <code> | ||
+ | PS C:\Users\Usuario\Desktop> New-MsolUser -UserPrincipalName prueba@uhu.es -ImmutableId 32e23dsce-2sdsd9-8238-3710-60bfb2ddss4e4 -DisplayName "Usuario prueba uhu" -FirstName Prueba -LastName UHU -UsageLocation "ES" | ||
+ | |||
+ | Password UserPrincipalName DisplayName isLicensed | ||
+ | -------- ----------------- ----------- ---------- | ||
+ | prueba@uhu.es Usurio pruaba uhu False | ||
+ | </code> | ||
+ | - Nos conectamos a http://potal.office.com e introducimos las credenciales de usuario, nos redireccionará al idp en donde acabaremos de introducir nuestra clave | ||
+ | - El usuario accederá al portal pero, al no tener asociada licencia, no podrá descargar ni usar los productos de microsoft. Para ver las licencias que podemos asociar usamos el comando ''Get-MsolAccountSku'': <code> | ||
+ | PS C:\Users\Usuario\Desktop> Get-MsolAccountSku | ||
+ | AccountSkuId ActiveUnits WarningUnits ConsumedUnits | ||
+ | ------------ ----------- ------------ ------------- | ||
+ | universidadhuelva:OFFICESUBSCRIPTION_FACULTY 33000 0 0 | ||
+ | universidadhuelva:OFFICESUBSCRIPTION_STUDENT 120000 0 0 | ||
+ | universidadhuelva:STANDARDWOFFPACK_FACULTY 34000 0 0 | ||
+ | universidadhuelva:STANDARDWOFFPACK_STUDENT 130000 0 0 | ||
+ | |||
+ | </code> | ||
+ | - Para asociar licencias al usuario creado ejecutamos: <code> | ||
+ | PS C:\Users\Usuario\Desktop> Set-MsolUserLicense -UserPrincipalName prueba@uhu.es -AddLicenses universidadhuelva:OFFICESUBSCRIPTION_FACULTY | ||
+ | </code> | ||
+ | - Si nos volvemos a conectas a http://portal.office.com e introducimos las credenciales de usuario, debería aparecer una pantalla similar a la siguiente en la que tendremos los productos asociados a la licencia{{ http://i.imgur.com/PTF3VCZ.png }} | ||
+ |