3. SimpleSAMLphp och Office 365

Inledning

Guiden beskriver hur man ansluter Office 365 mot sin redan befintlig simpleSAMLphp IdP. Då metatdatat som Skolfederation distribuerar inte innehåller information om Office 365 måste det konfigureras ett ett-till-ett-förhållande mellan simpleSAMLphp och Office 365. För att åstadkomma det matar man manuellt in metadata i respektive konfiguration.

Office 365

För att federerad inloggning ska fungera så krävs det att Azure AD är konfigurerat för Office 365. Logg in i Office 365 och gå till Administrationsmenyn.

Välj sen Azure AD.

UPN-suffix

Om man ska provisionera sina lokala AD användare till Azure AD används Azure Active Directory Connect. Som standard använder Azure Active Directory Connect attributet UserPrincipalName som användarnamn. Användarens UPN-suffix ska vara satt till den SSO domän som är konfigurerad i Azure AD. I det här exemplet använder vi domänen ssdomain.com.


Om det behövs, lägga till SSO domänen som ett UPN-suffix i det lokala AD:t. Logga in på en av organisationens Active Directory domänkontrollant

  1. Starta Active Directory domäner och förtroenden
  2. I konsolträdet, högerklicka på Active Directory domäner och förtroenden klicka sen på Egenskaper
  3. Välj fliken UPN suffix, skriver ett alternativ UPN -suffix för skogen klicka sen på lägg till
  4. Upprepa steg 3 för att lägga till ytterligare alternativa UPN –suffix

Installera Azure AD modulen

Konfigurationen kommer att ske med PowerShell. Det behövs installeras två tillägg som hämtas från Microsoft.

Microsoft Online Services Sign-In Assistant for IT Professionals RTW

Azure Active Directory Module for Windows PowerShell (64-bit version)

Skapa SSO domänen i Azure AD

Starta PowerShell och anslut.
$Cred=get-credential användare@mindomän.onmicrosoft.com
Connect-MSOLService –Credential $cred

 

Lägg till domänen som ska användas för SSO. Det går inte att använda den standarddomänen som tillhandahålls av Microsoft, den som slutar på "onmicrosoft.com" i en SSO konfiguration.

New-MsolDomain -Name ssodomain.com

 

För att verifiera att man är ägare till domänen vill Microsoft att man skapar en TXT post i domänens DNS zon. Postens värde sätts till en sträng som tas fram med följande.

Get-MsolDomainVerificationDns -DomainName ssodomain.com -Mode dnstxtrecord


Utmatningen från kommandot ser ut så här.

Label : ssodomain.com
Text : MS=ms83403005
Ttl : 3600


Om man t.ex. använder BIND som DNS server så lägger man till följande post i zonen. Byt ut MS=ms83403005 mot värde från punkten ovan.

@ 1h IN TXT MS=ms83403005


När konfigureringen av DNS zonen är klar kan ägandet verifieras.

Confirm-MsolDomain -DomainName ssodomain.com

Konfigurera domänen med metadata

SimpleSAMLphp metadata kan hämtas från den lokala SimpleSAMLphp installationen med följande länk. Värden från metadatat kommer att användas för att konfigurera SAML för Azure AD domänen.

https://idp.ssodomain.com/simplesaml/saml2/idp/metadata.php

I nästa PowerShell avsnitt sätts några variabler, ändra till egna värden:

  • $dom = SSO domänen
  • $certFile = sökväg till IDP certifikatet
  • $BrandName = Ett namn
  • $LogOnUrl = Hittas i SimpleSAMLphp metadatat, sök efter "SingleSignOnService"
  • $LogOffUrl = Hittas i SimpleSAMLphp metadatat, sök efter " SingleLogoutService"
  • $EntityID = Hittas i SimpleSAMLphp metadatat, sök efter "EntityID"

Certifikatet som används av IdP:n måste konfigureras i Azure AD domänen. Kopiera certifikatet till c:\temp\server.crt eller ändra sökvägen i variabeln $certFile.


Ändra variablerna, kopiera sen hela stycket till PowerShell. OBS Tryck på Enter två gånger för att kommandot ska köras.

$dom = "ssodomain.com"
$certFile = "C:\temp\server.crt"
$BrandName = "Sample SAML 2.0 IdP"
$LogOnUrl = "https://idp.ssodomain.com/simplesaml/saml2/idp/SSOService.php"
$LogOffUrl ="https://idp.ssodomain.com/simplesaml/saml2/idp/SingleLogoutService.php"
$EntityID = "https://idp.ssodomain.com/simplesaml/saml2/idp/metadata.php"
$Protocol = "SAMLP"
$cert = [IO.File]::ReadAllText($certFile)
$cert = $cert.replace("----BEGIN CERTIFICATE----","")
$cert = $cert.replace("----END CERTIFICATE----","")
$cert = $cert.replace("`r","")
$cert = $cert.replace("`n","")
Set-MsolDomainAuthentication -DomainName $dom `
-FederationBrandName $BrandName `
-Authentication Federated `
-PassiveLogOnUri $LogOnUrl `
-SigningCertificate $cert `
-IssuerUri $EntityID `
-LogOffUri $LogOffUrl `
-PreferredAuthenticationProtocol $Protocol 


Kontrollera att allt ser rätt ut med Get-MsolDomainFederationSettings.

Get-MsolDomainFederationSettings -domainName ssodomain.com | Format-List *
ExtensionData: System.Runtime.Serialization.ExtensionDataObject
ActiveLogOnUri: http://dummystsurl.microsoftonline.com/dummyurl
DefaultInteractiveAuthenticationMethod :
FederationBrandName: IIS Skolfederation
IssuerUri : https://idp.ssodomain.com/simplesaml/saml2/idp/metadata.php
LogOffUri : https://idp.ssodomain.com/simplesaml/saml2/idp/SingleLogoutService.php
MetadataExchangeUri :
NextSigningCertificate :
OpenIdConnectDiscoveryEndpoint :
PassiveLogOnUri: https://idp.ssodomain.com/simplesaml/saml2/idp/SSOService.php
PreferredAuthenticationProtocol : Samlp
SigningCertificate : Certifikat data
SupportsMfa : False 


Om man vill ändra något så måste man först sätta domänen till läge managed, för att sen igen köra kommandot Set-MsolDomainAuthentication.

 Set-MsolDomainAuthentication -DomainName ssodomain.com -Authentication Managed

Skapa en test användare

Om man inte vill synka sitt lokala AD till Azure AD eller för att bara lägga upp en test användare använder man New-MsolUser. Användaren läggs till i Azure AD och kan logga in i Office 365. Användare har i det här läget ingen licens för att nyttja något av programmen. En administratör kan inne i Office 365 tilldela användaren en Office licens.

New-MsolUser -UserPrincipalName kalle@ssodomain.com -ImmutableId 123456 -DisplayName "Kalle Andersson" -FirstName Kalle -LastName Andersson -AlternateEmailAddresses "kalle.andersson@ssodomain.com" -UsageLocation "SE"

Synkronisera användare

Synkroniseringen genomförs med verktyget Azure Active Directory Connect. Servern där Azure Active Directory Connect ska installeras måste vara medlem i den "Active directory forest" som ska synkroniseras. Ladde ner Microsoft Azure Active Directory Connect och genomför en första synkronisering.

http://www.microsoft.com/en-us/download/details.aspx?id=47594

För att starta synkroniseringen manuelt

C:\Program Files\Microsoft Azure AD Sync\Bin\DirectorySyncClientCmd.exe

Konfigurera SimpleSAMLphp

Konfigurera SimpleSAMLphp med metadata

SimpleSAMLphp måste konfigureras med metadata. Microsoft distribuerar sitt metadata på adressen:

https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml

Om man kopierar metadatat från webbläsaren så kommer det med extra formateringstecken. Spara därför ner filen från webbläsaren med Ctrl+s eller använd t.ex. wget eller curl för at hämta XML filen. Öppna filen med lämplig programvara. Kopiera allt innehåll (copy paste) till SimpleSAMLphp:s metadata-konverterare.

https://idp.ssodomain.com/simplesaml/admin/metadata-converter.php?

Den konverterade texten ska läggas in i filen simplesaml/metadata/saml-sp-remote.php.

EXEMPEL!!!

NamedID

ImmutableID är, vid standardkonfiguration av Azure Active Directory Connect, satt till att skapas av Active Directory attributet ObjectID. Attributet ObjectID base64 kodas och lagras i Azure AD tillsammans med resten av användardatan. ImmutableID är ankaret som används av Azure Active Directory Connect vid synkronisering av användare. När ett autentiseringssvar skickas måste NameID vara satt till ImmutableID.
Använd följande i PowerShell för att exportera användarnas ImmutableID till en kommaseparerad fil c:\temp\ImmutableID.csv.

Get-MSOLUser | where {$_.ImmutableId -ne $null} | select userprincipalname, ImmutableId | export-csv c:\temp\ImmutableId.csv


För att SimpleSAMLphp ska använda attributet ImmutableID som NameID måste det konfigureras. I filen simplesaml/metadata/saml20-sp-remote.php lägg till följande rad

'simplesaml.nameidattribute' => 'ImmutableID',

IDPEmail

Attributet IDPEmail är användarens Active Directory UPN och ska skickas med som ett attribut i autentiseringssvaret.

Skapa test användaren i exampleauth

Normalt brukar man populera användardata från en LDAP eller liknande. Här visas hur man kan använda modulen exampleauth:UserPass för att testa att installationen fungerar.
I file simplesaml/metadata/saml20-idp-hosted.php ska auth vara satt till example-userpass

'auth' => 'example-userpass',

 

Aktivera modulen

touch simplesaml/modules/exampleauth/enable 


Konfigurationen för example-userpass finns i filen simplesamlphp/config/authsources.php.

'example-userpass' => array(
    'exampleauth:UserPass',
    'kalle:lösenord' => array( 
        'IDPEmail' => array('kalle@ssodomain.com'),
        'ImmutableID' => array('123456'),
    ),
),