#
SAML Domain Federation with Authentik as IDP
#
Authentik Preparation
#
1. Create under Customization -> Properties
a new LDAP Source Property Mapping
with the following details
- Name:
LDAP Mapping: ImmutableId
- Expression:
import base64
import uuid
return {
"attributes": {
"ImmutableID": list_flatten(str(base64.urlsafe_b64encode(uuid.UUID(ldap.get('ObjectGUID')).bytes_le)
).replace("b'", "").replace("'", "").replace("-", "+")),
}
}
#
2. Create a new SAML Provider Property Mapping
with the following details:
- Name:
M365 SAML Mapping: NameID
- SAML-Attributsname:
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
- Expression:
return user.attributes.get('ImmutableID')
#
3. Create a new SAML Provider Property Mapping
with the following details:
- Name:
M365 SAML Mapping: emailAddress
- SAML-Attributsname:
IDPEmail
- Expression:
return user.email
#
4. Add the LDAP Source Mapping in the ldap config under user properties
#
5. Create a new SAML Provider with the following specific details:
- ACS URL:
https://login.microsoftonline.com/<tenant id>/saml2
- IssuerUri:
https://<your authentik url>
- Service binding:
POST
- TargetUri:
urn:federation:MicrosoftOnline
- Signing Certificate:
<select a avaiable certificate>
- Sign assertions:
True
- Sign responses:
True
- User Property Mappings:
M365 SAML Mapping: emailAddress
- Name ID Properties:
M365 SAML Mapping: NameID
#
6. Create an application for your needs and bind it to the previously created provider
#
7. Go back to your provider and download the signing certificate.
#
Federate the Domain in Microsoft 365
- Install the Microsoft.Graph PowerShell module (
Install-Module Microsoft.Graph -Repository PSGallery -Scope CurrentUser -Force
) - Import the module (probably you have to increase your function limit with
$MaximumFunctionCount = 16384
) - Setup all required variables:
$Domain = "<the domain that should be federated>"
$SignInUrl = "<SSO Url (Post) of your authentik provider>"
$SignOutUrl = "<SLO URL (Redirect) of your authentik provider>"
$Certificate = "<Downloaded certificate from Step 7. with out spaces, line breaks and the ---Ending/Beginning Certificate --- lines>"
$IssuerUri = "https://IssuerUri from step 5.>"
- Now connect to EntraID and federate your domain:
Connect-MgGraph -Scope "Directory.Read.All, Domain.Read.All, Domain.ReadWrite.All"
New-MgDomainFederationConfiguration -DomainId $Domain -PassiveSignInUri $SignInUrl -SignOutUri $SignOutUrl -SigningCertificate $Certificate -IssuerUri $IssuerUri -PreferredAuthenticationProtocol saml -FederatedIdpMfaBehavior acceptIfMfaDoneByFederatedIdp -DisplayName $Domain
- Now you should be able to login through a user with the federated domain. Hint: new users can only be created through EntraID Sync from an onPrem Active Directory
#
Helpfull Commands
Get-MgDomain #Lists all domains in this tenant
Get-MgDomainFederationConfiguration -DomainId $Domain #Get the federation config
Update-MgDomainFederationConfiguration # Update the federation config