Log in op Azure met KeyHub SSO

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>
<alg:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<alg:SigningMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
</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