KeyHub kan als identity provider ingericht worden voor een Azure tenant. Door dit te combineren met provisioning kan je users en rechten binnen Azure beheren in KeyHub
Belangrijk: Je KeyHub domein* kan niet gelijk zijn aan een "Azure DNS-verified domain".
bron: https://learn.microsoft.com/en-us/azure/active-directory/external-identities/direct-federation
*Het is mogelijk je SAML qualifier domein te laten afwijken van het domein waarop je KeyHub host. Dit is echter niet ideaal.
Onderstaande voorbeeld gebruikt het domein waarop KeyHub gehost wordt. Dit betekend dat gebruikers gaan inloggen met gebruiker@keyhub-domein.com. Dit kan dus afwijken van de KeyHub gebruikersnaam!
DNS configuratie
Voor Azure moet het domein van het subject, het custom email attribuut en de Azure external IDP overeenkomen. Voor dat laatste is een TXT record nodig in de DNS van het KeyHub domein.
TXT topicus-keyhub.com 5 min "DirectFedAuthUrl=https://keyhub.topicus-keyhub.com/login/saml2/sso" |
Configuratie in KeyHub
Subject domein
Het formaat van het subject kan in een KeyHub applicatie gekozen worden. Het formaat UPN wordt opgebouwd uit de KeyHub gebruikersnaam en het qualifier domein. Dit laatste wordt ingesteld onder
menu: Beheer --> menu: Instellingen --> tabblad: Algemeen --> Domein
SAML applicatie
Alleen Azure specifieke instellingen worden behandeld. De handleiding beschrijft alle instellingen.
Start in KeyHub met het aanmaken van een nieuwe applicatie
Menu: Beheer Toegang --> knop: Toevoegen --> Applicatie: SAML v2.0 --> knop: Volgende
Client identifier
https://login.microsoftonline.com/<tenant-id>/
De tenant-id is te vinden in https:/portal.azure.com --> Azure Active Directory
Custom attribuut
We maken hier gebruik van een script om het juiste domein mee te geven.
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
return account.username + "@topicus-keyhub.com";
Metadata
De Azure metadata URL id op het moment van schrijven niet werkend. De metadata zal je handmatig moeten aanpassen en ingeven. De basis komt van:
https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml
door hierin de entityID aan te passen met de juiste URI en tenant-id
entityID="https://login.microsoftonline.com/<tenanti-id>
en het blok <extensions> te verwijderen krijg je een werkende configuratie.
<Extensions>
</Extensions>
*Let ook op de certificaat einddatum. Je kan de certificaat data decoderen met openssl of online met bijvoorbeeld https://certlogik.com/decoder/
Voeg dit certificaat toe aan een KeyHub groepskluis met einddatum. Dan krijgen de groepsleden op tijd een notificatie.
Voorbeeld XML
<?xml version="1.0" encoding="UTF-8"?>
<EntityDescriptor
xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
xmlns:alg="urn:oasis:names:tc:SAML:metadata:algsupport" ID="_76e4705e-f9b0-43a6-bb4e-9006664ecc12" entityID="https://login.microsoftonline.com/<tenanti-id>/">
<Signature
xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<Reference URI="#_76e4705e-f9b0-43a6-bb4e-9006664ecc12">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<DigestValue>l7yWJPi14JNr24v2ZLhKA2uPRG0=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>Pms/MKj7DDDDGOY5cVbjD4IErkZYbG3gIFuB676S220xZ+2ueFMWg1qrzX5pvK6Jp1g6af/AurL4TFPImxbJ7xuwr2bd+3cLGDVP1el5epHwlbtO0CVm3ZRaPUF8++seGX8AHzew3NaB3PoOW9THAEdChlUc9oUSL8tWnh4lqluTiRpCjEj07C+VMaTpOr3LRWeH3UPyHMFbHX0rx3eu6ak5Yozl9i6ocBm7GsMaFzxuGco2hojfIwI6yFXQ81p8LOmloJtouxPQbQ6tTFWCj2mtzCD4gtE8E6wvtIujN8qCqWkUtW9Gav7cpdb60fnIqjT/tov88ir9hRfMDgf7zw==</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>MIIC/TCCAeWgAwIBAgIQN/GPegnT8blP2EcSdMMbBzANBgkqhkiG9w0BAQsFADApMScwJQYDVQQDEx5MaXZlIElEIFNUUyBTaWduaW5nIFB1YmxpYyBLZXkwHhcNMjEwMjE4MDAwMDAwWhcNMjYwMjE4MDAwMDAwWjApMScwJQYDVQQDEx5MaXZlIElEIFNUUyBTaWduaW5nIFB1YmxpYyBLZXkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDXdLGU2Ll5RPdDUnKQ+f/HS5qiTay2cCh9U2AS6oDM6SOxVhYGtoeJ1VPebcLnpgLfhPxzrwWoVzXSEF+VRQbnYID2Jb4khjgyEeoThk3VqrThwhahpSbBg2vo06vIOp1TS2R1BiwHKTLoB1i1IJnaIFSC3BN6pY4flXWyLQt/5ABXElv2XZLqXM9Eefj6Ji40nLIsiW4dWw3BDa/ywWW0MsiW5ojGq4vovcAgENe/4NUbju70gHP/WS5D9bW5p+OIQi7/unrlWe/h3A6jtBbbRlXYXlN+Z22uTTyyCD/W8zeXaACLvHagwEMrQePDXBZqc/iX2kI+ooZr1sC/H39RAgMBAAGjITAfMB0GA1UdDgQWBBSrX2dm3LwT9jb/p+bAAdYQpE+/NjANBgkqhkiG9w0BAQsFAAOCAQEAeqJfYHnsA9qhGttXFfFpPW4DQLh5w6JCce7vGvWINr5fr1DnQdcOr+wwjQ/tqbckAL2v6z1AqjhS78kbfegnAQDwioJZ1olYYvLOxKoa6HF+b1/p0Mlub8Zukk2n1b2lKPBBOibOasSY7gQDwlIZi7tl9nMTxUfdYK+E5Axv7DVnmUCwcnnpV5/1SFdNyW2kWO4C68rrjMOvECfwrKkbfVJM8f9krEUBuoBF8dTDv7D2ZM4Q2buC70NbfaNWUX0yFvKI0IuTqk8RBfGTRQ4fZAbhMPaykEpBu6dNjTi5YOa0lNqFGS7Ax7leCh5x9lV8elcLkXs8ySo8AOQJk0hgIw==</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
<SPSSODescriptor WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<KeyDescriptor use="signing">
<KeyInfo
xmlns="http://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>MIIC/TCCAeWgAwIBAgIQbgDHfi3t1JNGVqwD5/7lmjANBgkqhkiG9w0BAQsFADApMScwJQYDVQQDEx5MaXZlIElEIFNUUyBTaWduaW5nIFB1YmxpYyBLZXkwHhcNMjAxMjIxMDAwMDAwWhcNMjUxMjIxMDAwMDAwWjApMScwJQYDVQQDEx5MaXZlIElEIFNUUyBTaWduaW5nIFB1YmxpYyBLZXkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDFT0/0/2qQurnYa0LbJHF9YYozhEH6r9mCxVDBYbewSG4tGgrWpsewQ/96pcczGMQctMvU+h2eX38Hx/f9JAIDbuRQzQlsPhQS7DDZ6WlTXU+t8d/g2C7fpSoLs4KVdJih4xyjLUWj+BK/ijsRjBt4Riw9VbJH/DdWKyoSMbECEiE+s1RtLP/eYoMmNfxyQGqWirCNqVNBTlqzYQp4dgF0foYy4ktoxwmQOVoTcIMFYp1I4pFPI7CxuMLkfK0X7aTbM7YGphvMfJxJkjrQdyI7G5d1t4DNi3zkEbBT7FGAr6qPt3Kn9ralpqJKHdpEBA9N0vNwQo5XTYIhUbPQ16IRAgMBAAGjITAfMB0GA1UdDgQWBBRs7tPmfkksSr67KtElHjYZbeaCTjANBgkqhkiG9w0BAQsFAAOCAQEAJqwMZSjQJ36x+1sty6EeLKQLQewQwPaEC47Zut+8bXed6Q8jMZ0bfa/MM7XquEcabaMZLQuKLft44YXwXXQOfQrI2qjQr3eToJFlDT9hR0rfp9wQqttDxd6Aa6RWwDTgo5oKUQCTKLHhEy8uWzScK0eGt2d7TWTaDXjRSwNq6tM7fRhZs07tKBV3xfi9EQy/mlavAMFRBVm86NSo7AsOG1IOMq03U3ooCWAXh9PdvvHNfHhH19futAnC/HeOjwRF1Qc527aBMphYFQLdiThfmfmiE/AhQqCwZ2oE7uCJhBtR+Kb1ZGhjI35pHfsSqGiFa7Kr+5ave822PDcke89Mvg==</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
<KeyDescriptor use="signing">
<KeyInfo
xmlns="http://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>MIIC/TCCAeWgAwIBAgIQN/GPegnT8blP2EcSdMMbBzANBgkqhkiG9w0BAQsFADApMScwJQYDVQQDEx5MaXZlIElEIFNUUyBTaWduaW5nIFB1YmxpYyBLZXkwHhcNMjEwMjE4MDAwMDAwWhcNMjYwMjE4MDAwMDAwWjApMScwJQYDVQQDEx5MaXZlIElEIFNUUyBTaWduaW5nIFB1YmxpYyBLZXkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDXdLGU2Ll5RPdDUnKQ+f/HS5qiTay2cCh9U2AS6oDM6SOxVhYGtoeJ1VPebcLnpgLfhPxzrwWoVzXSEF+VRQbnYID2Jb4khjgyEeoThk3VqrThwhahpSbBg2vo06vIOp1TS2R1BiwHKTLoB1i1IJnaIFSC3BN6pY4flXWyLQt/5ABXElv2XZLqXM9Eefj6Ji40nLIsiW4dWw3BDa/ywWW0MsiW5ojGq4vovcAgENe/4NUbju70gHP/WS5D9bW5p+OIQi7/unrlWe/h3A6jtBbbRlXYXlN+Z22uTTyyCD/W8zeXaACLvHagwEMrQePDXBZqc/iX2kI+ooZr1sC/H39RAgMBAAGjITAfMB0GA1UdDgQWBBSrX2dm3LwT9jb/p+bAAdYQpE+/NjANBgkqhkiG9w0BAQsFAAOCAQEAeqJfYHnsA9qhGttXFfFpPW4DQLh5w6JCce7vGvWINr5fr1DnQdcOr+wwjQ/tqbckAL2v6z1AqjhS78kbfegnAQDwioJZ1olYYvLOxKoa6HF+b1/p0Mlub8Zukk2n1b2lKPBBOibOasSY7gQDwlIZi7tl9nMTxUfdYK+E5Axv7DVnmUCwcnnpV5/1SFdNyW2kWO4C68rrjMOvECfwrKkbfVJM8f9krEUBuoBF8dTDv7D2ZM4Q2buC70NbfaNWUX0yFvKI0IuTqk8RBfGTRQ4fZAbhMPaykEpBu6dNjTi5YOa0lNqFGS7Ax7leCh5x9lV8elcLkXs8ySo8AOQJk0hgIw==</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
<KeyDescriptor use="signing">
<KeyInfo
xmlns="http://www.w3.org/2000/09/xmldsig#">
<X509Data>
<X509Certificate>MIIC9jCCAd6gAwIBAgIJAKQ96FDw4zyOMA0GCSqGSIb3DQEBCwUAMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTAeFw0yMzA3MTYxODU1NTVaFw0yODA3MTYxODU1NTVaMCkxJzAlBgNVBAMTHkxpdmUgSUQgU1RTIFNpZ25pbmcgUHVibGljIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtm2+vZtNrL+2zAKVchYm14OpGgUlMoo2chdtpIrR8GMFZV36u+Y6/w9pgqmxiYcs4BoeByfSJpk/uQT+nAo+Xjx9fHPlL9iEZnSZSq/bxUHLdObFGyfTaWMWlpLB23hFFVCacpACFJ0qPUPyDRABc2PHuN6fuR6dTamst5wrbJzollDQnUtQKxg7UqqYpM01t7kApm5vGq0SME6g5atEXz2ipDY4g/CSEfNmCiiv90gZ+JbnA0O8RKf740l3HHQx4vyVogeyOdIeicibobKunlt9dHBhxJ4bHY26cRD+K+vFkD/o5OoROhr4u4kxRRpNKl82X58bW50SOW2TpT1oUCAwEAAaMhMB8wHQYDVR0OBBYEFG8M5pHShE1oYsZUvfRS9+hR9+xCMA0GCSqGSIb3DQEBCwUAA4IBAQBNE6JD5YikgyhJtJ2ebaOPEqO+5Ea9EkJNcdehUPa7fkeVnW//jnDW4ETHf0o+ZE63vI5+7BHoTJkgyKoeUMQjVRn+bueH81nUdGjuflYlIxENTqW36wsAeqYkLGoy+tVUN9cPNtfjuEH3HkKmf+o+IPmUtPU1paUhMzTTD5FllDyeQCeIMibJVzcT7eW4u1QahUdK3YOoOL7TQK2IiEpJ1vnDqxNGY3m+FinsnO9W3lMlQYRMy+VzaDSm43gyIud92B5/YtqjcWZa8PXjNsjmErDvT4fPqiM/zn8BzRr0TSTeG11EWMgyioGSH9y+5OSoZmo2622sm8jxbAVm+BSJ</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
<SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.microsoftonline.com/login.srf"/>
<NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>
<NameIDFormat>urn:mace:shibboleth:1.0:nameIdentifier</NameIDFormat>
<NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</NameIDFormat>
<NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>
<NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</NameIDFormat>
<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://login.microsoftonline.com/login.srf" index="0" isDefault="true"/>
<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign" Location="https://login.microsoftonline.com/login.srf" index="1"/>
<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:PAOS" Location="https://login.microsoftonline.com/login.srf" index="2"/>
</SPSSODescriptor>
</EntityDescriptor>
Groepen toegang geven
Om KeyHub gebruikers toegang te geven kan je groepen toevoegen aande gemaakte SAML applicatie
menu: Beheer toegang --> kies: de aangemaakt SAML applicatie --> tabblad: Groepen --> knop: Toevoegen
In Azure
Nu de DNS en applicatie klaar zijn kan de externe IDP in Azure aangemaakt.
log in op https://portal.azure.com en navigeer naar Azure Active Directory (bijvoorbeeld via de zoekbalk)
menu: External Identities --> menu: Alle id-providers --> knop: Nieuwe SAML/WS-Fed IdP
Weergavenaam
vrije keuze
Protocol van de id-provider
SAML
Domeinnaam van federatieve IdP
het domein. In ons voorbeeld is dat topicus-keyhub.com
Selecteer een methode voor het invullen van metagegevens
Metagegevensbestand parseren*
*Dit bestand kan je downloaden van: https://<keyhub-url>/login/saml2/metadata. Om het te kunnen uploaden moet er de extensie .xml aan toegevoegd worden.
3 van de 4 verplichte velden worden automatisch ingevuld.
Metadatagegevens-URL
vul hier dezelfde URL in als waar de metadata is gedownload:
https://<keyhub-url>/login/saml2/metadata
knop: Opslaan
Einde deel 1
De SSO functionaliteit is hiermee klaar. Echter in onze use case heeft de Azure tenant nog geen gebruikers. Deze laten we door KeyHub provisionen op basis van groepslidmaatschappen. Deze koppeling staat beschreven in het volgende artikel:
Koppel Azure tenant met identity-provider-domein