Office365
Panoramica
Office 365 è il servizo di cloud di Microsoft che può erogare vari servizi (mail, crm ecc.) tra i quali è di interesse per la nostra Università ITAcademy, un sistema per erogare corsi online sulle tecnologie Microsoft.
Il servizio di cloud prevede la creazione di utenti sulla nuvola, ma la fase di autenticazione può essere gestita dal server shibboleth dell'istituzione. Le utenze devono essere create con la stessa username locale, ma non hanno password.
Documentazione
I documento che ho seguito è la documentazione di shibboleth.
In passato avevo usato anche:
- http://technet.microsoft.com/it-it/library/jj205456.aspx
- http://community.office365.com/it-it/wikis/live-at-edu-transition/2002.aspx#ShibbolethSteps
In più esiste un white paper di 140 pagine che copra anche l'installazione di shibboleth:
Catalogo dei nomi, dei domini e delle pagine di login
Su Office365 è stato definito un tenant dal unimore365.onmicrosoft.com con un unico utente: admin@unimore365.onmicrosoft.com. Il login per questo utente che è l'amministratore è da: https://portal.microsoftonline.com/default.aspx.
Sul tenant è stato definito un dominio: unimore.it, che è stato verificato.
L'accesso a ITAcademy è da: http://www.microsoft.com/itacademy/ -> scegliere "Member Sign In" poi in basso a destra sotto la scritta E-Learning access fare clic su: "Access Microsoft E-Learning Central using your Office 365 account"
Certificate based auth with azure service principals
Per la gestione delle applicazione azure: manage azure applications.
Preparare Shibboleth a Office365
Leggere: https://wiki.shibboleth.net/confluence/display/IDP30/Office+365
Federare Office365 con shibboleth
Questa fase avviene con un comando powershell su un client Microsoft su cui siano state installate certe estensioni/moduli aggiuntivi (http://community.office365.com/en-us/forums/183/t/74214.aspx).
Il comando è:
import-module MSOnline $pass = convertto-securestring "segreto" -asplaintext -force $cred = New-Object System.Management.Automation.PSCredential "root@unimoreit.onmicrosoft.com", $pass Connect-MsolService -Credential $cred $dom = "unimore.it" $url = "https://idp.unimore.it/idp/profile/SAML2/POST/SSO" $uri = "https://idp.unimore.it/idp/shibboleth" $logouturl = "https://idp.unimore.it/shibboleth/logout.html" $cert = @" MIIDJDCCAgygAwIBAgIVAJBITnJoX92EsdoWjSdjb3G2d4VwMA0GCSqGSIb3DQEB BQUAMBkxFzAVBgNVBAMTDmlkcC51bmltb3JlLml0MB4XDTEwMDEyNjEzMzg0MloX DTMwMDEyNjEzMzg0MlowGTEXMBUGA1UEAxMOaWRwLnVuaW1vcmUuaXQwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAKvIYSyrl0QfPfFE+SlhVJ5RW7nJ7 sDkRzEZS2q2W3Nm3PtzidHNNxH3yzely2oyOXd6PVsx/ky5KndOY9GfSm1jFdmAX 7fwFhXwFdlPLrvSL4iFMPR966z6R7OF+Oa/kpUdGPXuAVau61KOX7wqPsuZ7f7PX DaGRdqKyHEBNm9XehmYukjmwmLJSfd9R1+HUfP88khxYZD7CYHX4wU2Qp5KE7OIb g6ZGsqRYaCkGSYqQnsJjXGvyAU1BgPBFPdsn2X/Gxz2U06JvhnvCJv1JlzIrWlsj 3M8/HF+celfuG7+qr1vTALoNeXypHFq+y4xypu+r7lWflcadx8KSPlfzAgMBAAGj YzBhMEAGA1UdEQQ5MDeCDmlkcC51bmltb3JlLml0hiVodHRwczovL2lkcC51bmlt b3JlLml0L2lkcC9zaGliYm9sZXRoMB0GA1UdDgQWBBT/4cn1m4OFDg3Iv8CDfULK 1s8JljANBgkqhkiG9w0BAQUFAAOCAQEAq37LOUh+3GFcqxwZKBiHbbudxRFRb7Hr uvXTpGuuV+eb/5lE7gCzNsXGV07OM6s+of45Hd2c9rVD8+xnSZvPkUGy30USVn/s D/mWS08gIL09LHfrgvM3kRGxuE6kyVdTuwTdtkcSXjYtm+RZztp95w9LV8n3Jve1 p8TJi7Tjt4LZfVL5h+sDSA+FT/jLLYhLN0uy3YOBhIbdVgsDBESeM3jyOTiHxbxm O590yv35UKIENt7Ov87uykF3frwjIjMEBffRGYsgmrbl3HdbA5yUDs+9VQS/CXKg ApsMFkXxazWEsSuKY+zrMAimGDVPmAjswYuG9Jl3PICYIciqz2Ll+g== "@ Set-MsolDomainAuthentication -DomainName $dom -FederationBrandName $dom -Authentication Federated -PassiveLogOnUri $url -SigningCertificate $cert -IssuerUri $uri -LogOffUri $logouturl -PreferredAuthenticationProtocol SAMLP
La stringa $cert va scritta tutta di fila senza heredoc (a me non funziona).
Questo comando potrebbe essere rifiutato con l'errore:
set-mosldomainauthentication : you cannot remove this domain as the default domain without replacing it with another default domain. Use the set-msoldomain cmdlet to set another domain as the default domain before you delete this domain
soluzione:
set-msoldomain -name unimore365.onmicrosoft.com -isdefault
Creare un sottodominio federato
New-MsolDomain -Name "studenti.unimore.it" -Authentication Federated
Creare un utente sulla nuvola
La creazione di un utente avviene con uno script powershell su un client Microsoft su cui siano state installate gli stessi moduli aggiuntivi del powershell.
Lo script per aggiungere un utente è:
New-AzureADUser -DisplayName "Giuseppe Tondi" -PasswordProfile $PasswordProfile \ -UserPrincipalName "gtondi@unimore.it" -AccountEnabled $true -mailnickname \ 'gtondi' -immutableid 'gtondi'
$pass = convertto-securestring "segreto" -asplaintext -force $cred = New-Object System.Management.Automation.PSCredential "admin@unimore365.onmicrosoft.com", $pass Connect-AzureAD -Credential $cred $PasswordProfile = New-Object -TypeName Microsoft.Open.AzureAD.Model.PasswordProfile $PasswordProfile.EnforceChangePasswordPolicy = $false $PasswordProfile.Password = 'Tep4ree[y6va' New-AzureADUser -DisplayName "Mauro Minella" -PasswordProfile $PasswordProfile \ -UserPrincipalName "mminella@unimore.it" -AccountEnabled $true -mailnickname 'mminella' \ -immutableid 'mminella'
Per eseguire questo script senza entrare in powershell, si può usare un file bat:
@echo off powershell.exe -ExecutionPolicy Bypass "& 'X:\office365\mminella.ps1'"
Cancellare un utente
Il modulo azuread mette gli utenti cancellati in un cestino per 30 giorni.
Per cancellarli (definitivamente) usare i vecchi msolservices:
connect-msolservice remove-msoluser -userprincipalname delete_me@unimore.it -force remove-msoluser -RemoveFromRecycleBin -userprincipalname delete_me@unimore.it -force
Lista degli utenti sulla nuvola
Per avere gli utenti in un file:
get-azureaduser -all $true 2>&1 | out-file -encoding utf8 -filepath "office365users.txt"
Il filtro -EnabledFilter EnabledOnly e' necessario altrimenti lancia l'errore: non posso essere esguito adesso, riprovare piu' tardi.
Per un solo utente:
Get-AzureADUser -Filter "DisplayName eq 'Roberto Messori'"|Format-List
Far si' che la password dell'amministatore locale non scada mai
Set-MsolUser -UserPrincipalName <user ID> -PasswordNeverExpires $true
Sincronizzare gli utenti OpenLDAP con Azure AD
AzureAD e' il server active directory della nuvola Office365.
Siccome il provisioning degli utenti si può far con gli script powershell, è possibile creare un programma anche sincrono per tenere sincronizzati gli utenti unimore su Office365.
Powershell AzureAD
Set-PSRepository -name PSGallery -InstallationPolicy Trusted Install-Module AzureAD
DirSync
Microsoft fornisce un tool per la sincronizzazione degli utenti da un AD di dominio ad AzureAd.
L'utente amministrativo che si imposta nella configurazione del servizio per leggere la directory AD deve essere nel gruppo "Enterprise Admins".
Gli utenti che possono configurare il servizio devono essere nel gruppo (locale) FIMSyncAdmins.
Qui si trovano le istruzioni di setup e per il filtraggio degli utenti basato sull'appartenza ad una OU.
I problemi sono due:
- lo userid di importazione su AzureAD di default non coincide con quello che shibboleth si aspetta (eppn) perche' il dominio non e' unimore.it ma unimore365.onmicrosoft.com;
- il filtraggio su OU non e' fattibile. Soluzioni di filtraggio alternative sono possibili, ma non supportate. Le possibilita' sono comunque solo: ou, dominio e attributi (non gruppi).
Microsoft graph
E' la soluzione REST per accedere ad AzureAD. Per l'autenticazione si usa OAuth2.0.
Creare a dare i privilegi ad un utente di servizio
Ho dovuto usare le PowerShell AzureAD. Ad esempio per i privilegi:
Add-AzureADDirectoryRoleMember
Associare un certificato ad un sp di accesso
Con le CLI:
./bin/az ad sp reset-credentials --name manatee-azure-ad --create-cert --debug --years 30
Accedere con un sp
./bin/az account list
prendere il valore della chiave: "tenantId" (è un esadecimale piuttosto lungo)
./bin/az login --service-principal -u https://manatee.unimore.it -p ./certs/manatee-azure-ad.pem --tenant tenantId