# Integración con Office365

[Azure Active Directory](https://azure.microsoft.com/ "https://azure.microsoft.com/") es una solución en la nube global de administración de identidades de [Microsoft](https://www.microsoft.com/es-es/ "https://www.microsoft.com/es-es/"). Ayuda a proteger el acceso a aplicaciones locales y en la nube, incluidos los servicios en línea como [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 "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").

La integración de [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 "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") con el proveedor de identidad de la [Universidad de Huelva](http://www.uhu.es/ "http://www.uhu.es") se realiza en dos fases:

<div id="bkmrk-federaci%C3%B3n-del-domin">1. <div>Federación del dominio en AzureAD</div>
2. <div>Configurar el Idp de la Universidad de Huelva para proveer los atributos que necesita Office365</div>
3. <div>Provisión de usuarios</div>

</div>## Federación del dominio en AzureAD

<div id="bkmrk-en-una-m%C3%A1quinas-wind"><div><div>1. <div>En una máquinas windows instalamos la [PowerShell](https://msdn.microsoft.com/es-es/powershell/scripting/setup/installing-windows-powershell "https://msdn.microsoft.com/es-es/powershell/scripting/setup/installing-windows-powershell") y módulo para [Azure AD](https://github.com/Azure/azure-powershell/releases "https://github.com/Azure/azure-powershell/releases") </div>
2. <div>Arrancamos el PowerShell y usamos el comando `Connect-MsolService` para conectarnos a AzureAD e introducimos las credenciales del administrador del AzureAD ```
    Connect-MsolService
    ```
    
    </div>
3. <div>Usamos el comando `New-MsolDomain` para crear el nuevo dominio a federar, en este caso `uhu.es`: ```
    New-MsolDomain -Name uhu.es -Authentication Federated
    ```
    
    </div>
4. <div>A continuación usamos el comando `Get-MsolDomainVerificationDns` para indicarle a AzureAD cómo queremos que compruebe el dominio. En nuestro caso será mediante [registros de texto](http://www.zytrax.com/books/dns/ch8/txt.html "http://www.zytrax.com/books/dns/ch8/txt.html") (`-Mode DnsTxtRecord`) introducimos en el <abbr data-original-title="Domain Name System" title="">DNS</abbr> responsable del dominio a federar: ```
    Get-MsolDomainVerificationDns -DomainName uhu.es -Mode DnsTxtRecord
    ```
    
    </div>
5. <div>Como resultado, este comando nos devolverá el nombre del resgistro que tenemos que añadir, su valor y el TTL.</div>
6. <div><div>Accedemos al [portal de office 365](http://portal.office365.com/ "http://portal.office365.com") como administrador. Nos posicionamos en la opción `configuración`, `dominios`. Pulsamos sobre el dominio creado:</div></div>[![image-1637253844397.png](https://ayudame.uhu.es/info/uploads/images/gallery/2021-11/scaled-1680-/image-1637253844397.png)](https://ayudame.uhu.es/info/uploads/images/gallery/2021-11/image-1637253844397.png)
7. En el paso `comprobación del dominio` pulsamos sobre el botón de `confirmar`.
8. <div>Si todo ha salido bien pasará directamente a la pestaña configuración de los servicios.</div>
9. <div>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`: ```
    Get-MsolDomain
    ```
    
    </div>
10. <div>Antes de continuar, es necesario obetener los siguientes datos: <table class="inline table table-striped table-condensed"><thead><tr class="row0"><th class="col0 leftalign">Nombre</th><th class="col1 leftalign">Descripción</th><th class="col2 leftalign">Valor</th></tr></thead><tbody><tr class="row1"><td class="col0 leftalign">DomainName</td><td class="col1 leftalign">Nombre del dominio</td><td class="col2 leftalign">uhu.es</td></tr><tr class="row2"><td class="col0 leftalign">FederationBrandName</td><td class="col1 leftalign">some colspan (note the double pipe)</td><td class="col2 leftalign"> </td></tr><tr class="row3"><td class="col0 leftalign">MetadataExchangeUri</td><td class="col1 leftalign">Uri para obtener los metadados del IDP</td><td class="col2 leftalign"> </td></tr><tr class="row4"><td class="col0 leftalign">ActiveLogOnUri</td><td class="col1">Uri para iniciar el proceso de logon pasivo</td><td class="col2">[https://idpnew.uhu.es/idp/saml2/idp/SSOService.php](https://idpnew.uhu.es/idp/saml2/idp/SSOService.php "https://idpnew.uhu.es/idp/saml2/idp/SSOService.php")</td></tr><tr class="row5"><td class="col0 leftalign">PassiveLogOnUri</td><td class="col1">Uri para iniciar el proceso de logon pasivo</td><td class="col2">[https://idpnew.uhu.es/idp/saml2/idp/SSOService.php](https://idpnew.uhu.es/idp/saml2/idp/SSOService.php "https://idpnew.uhu.es/idp/saml2/idp/SSOService.php")</td></tr><tr class="row6"><td class="col0 leftalign">SigningCertificate</td><td class="col1 leftalign">Certificado para firmar las aserciones</td><td class="col2 leftalign"> </td></tr><tr class="row7"><td class="col0 leftalign">IssuerUri</td><td class="col1 leftalign">EntityID de idp</td><td class="col2 centeralign">[https://idp.uhu.es/idp/](https://idp.uhu.es/idp/ "https://idp.uhu.es/idp/")</td></tr><tr class="row8"><td class="col0 leftalign">LogOffUri</td><td class="col1 leftalign">Uri para iniciar el proceso de logoff</td><td class="col2 leftalign">[https://idpnew.uhu.es/idp/saml2/idp/SingleLogoutService.php](https://idpnew.uhu.es/idp/saml2/idp/SingleLogoutService.php "https://idpnew.uhu.es/idp/saml2/idp/SingleLogoutService.php")</td></tr><tr class="row9"><td class="col0">PreferredAuthenticationProtocol</td><td class="col1">Protocolo para hacer la autentificación</td><td class="col2">SAMLP</td></tr></tbody></table>
    
    </div>
11. <div>A continuación usamos el comando `Set-MsolDomainAuthentication` para asociar los valores antes indicados a AzureAD ```
    $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
    ```
    
    </div>
12. <div>Para comprobar que ya ha sido federado ponemos Get.MsolDomain y ebn el campo Authentication pondrá federated</div>

</div></div></div>## 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:

<div id="bkmrk-en-el-fichero%C2%A0config">1. <div>En el fichero `config/config.uhu` añadimos la localización de los metadatos de azuead ```
        'metadata.sources' => array(
            array('type' => 'flatfile'),
            array('type' => 'flatfile', 'directory' => 'metadata/azuread'),
    
        ),
    ```
    
    </div>
2. <div><div>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](https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml "https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml")```
    'azuread' => array(
           'cron'     => array('daily'),
           'sources'  => array(
                 array(
                      'src' => 'https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml',
    ```
    
    </div></div>.
3. <div>Según se indica en el apartado **Atributos requeridos** del documento[ Utilizar un proveedor de identidad SAML 2.0 para implementar el inicio de sesión único](https://msdn.microsoft.com/es-es/library/azure/dn641269.aspx "https://msdn.microsoft.com/es-es/library/azure/dn641269.aspx"), 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`: ```
    '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',
    ```
    
    </div>
4. <div>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 [Utilizar un proveedor de identidad SAML 2.0 para implementar el inicio de sesión único](https://msdn.microsoft.com/es-es/library/azure/dn641269.aspx "https://msdn.microsoft.com/es-es/library/azure/dn641269.aspx"): ```
    'signature.algorithm'=> 'http://www.w3.org/2000/09/xmldsig#rsa-sha1',
    'redirect.sign' => true,
    'redirect.validate' => false,
    'assertion.encryption' => false, 
    ```
    
    </div>
5. <div>Por último usamos el `authproc` para establecer los filtros necesarios para obtener las atributos solicitados</div>
6. <div>El fichero final sería: ```
    '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',
    ),
    ```
    
    </div>
7. <div>El `InmutableID` lo obtenemos a partir del atributo `eduPersonPrincipalName` de la siguiente forma ```
    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);
        ',
    );
    ```
    
    </div>

</div>## 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.

<div id="bkmrk-creamos-la-cuenta-de">1. <div>Creamos la cuenta del usuario prueba@uhu.es ponemos: ```
    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 
    ```
    
    </div>
2. <div>Nos conectamos a [http://potal.office.com](http://potal.office.com/ "http://potal.office.com") e introducimos las credenciales de usuario, nos redireccionará al idp en donde acabaremos de introducir nuestra clave</div>
3. <div>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`: ```
    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
    ```
    
    </div>
4. <div>Para asociar licencias al usuario creado ejecutamos: ```
    PS C:\Users\Usuario\Desktop> Set-MsolUserLicense -UserPrincipalName prueba@uhu.es -AddLicenses universidadhuelva:OFFICESUBSCRIPTION_FACULTY 
    ```
    
    </div>
5. <div><div>Si nos volvemos a conectas a [http://portal.office.com](http://portal.office.com/ "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</div></div>[![image-1637254049843.png](https://ayudame.uhu.es/info/uploads/images/gallery/2021-11/scaled-1680-/image-1637254049843.png)](https://ayudame.uhu.es/info/uploads/images/gallery/2021-11/image-1637254049843.png)

</div>