Cet article vous explique comment effectuer la synchronisation avec Azure AD. Cette configuration est recommandée s'il n'existe aucune instance Active Directory sur site. Si vous avez des serveurs AD sur site, il est recommandé d'utiliser l'intégration AD sur site.
Sommaire
Installer les modules Azure dans PowerShell
- Connectez-vous à un ordinateur sur lequel vous exécuterez un script PowerShell planifié (il s'agit généralement d'un contrôleur de domaine ou d'un serveur de fichiers).
- Ouvrez PowerShell ISE et exécutez les commandes suivantes :
a. install-module msonline et sélectionnez Oui pour tout à l'invite.
b. Install-Module AzureAD et sélectionnez Oui pour tout à l'invite.
Créer une connexion d'application sécurisée Azure
- Dans PowerShell ISE, créez un fichier.
- Copiez le script ci-dessous dans le fichier.
- Enregistrez le fichier sous le nom « Azure-App-Setup.ps1 ».
- Exécutez le script et suivez les invites du script. Vous serez invité à vous authentifier auprès de votre instance Azure et à fournir certains noms de variables.
Vous serez invité à fournir les informations suivantes :- Choisissez un mot de passe pour l'application sécurisée Azure.
- Votre identifiant sécurisé Azure AD.
- Le nom de fichier d'un chemin de dossier PFX.
- Le nom que vous souhaitez utiliser ou votre connexion Dashlane dans Azure.
-
Exécutez le script suivant :
#Connect to AzureAD using the GUI prompt Write-Host "Connecting to AzureAD..." -foregroundcolor yellow Connect-AzureAD Write-Host "Connected to AzureAD" -foregroundcolor green #Enter your environment specific details. Write-Host "Requesting a secure password..." -foregroundcolor yellow $pwd_secure_string = Read-host "Choose a secure password for the Azure App" -AsSecureString # This is the password used to secure your Azure App Connection $ThisServerDNSName = $env:computername+"."+$env:userdnsdomain # The server this sync script will be scheduled to run on. $FilePathPFX = Read-Host "Enter a filename and path for saving the .pfx file EG C:\filepath\cert.pfx" # Enter in a filepath & name where the generated cert will be saved. $DashlaneAppName = Read-host "Enter a name for the Dashlane Azure App, it can be anything" $DashlaneURI = "https://$DashlaneAppName" #Display the variables Write-Host "." Write-Host "." Write-Host "." Write-Host "A self-signed certificate will be created for a secure connection to this server" -foregroundcolor Yellow Write-Host "$ThisServerDNSName" -foregroundcolor green Write-Host "" Write-host "PFX save location & name" -foregroundcolor yellow Write-Host "$FilepathPFX" -foregroundcolor green Write-Host "" Write-Host "Azure App Name" -foregroundColor Yellow Write-Host "$DashlaneAppName" -foregroundcolor green Write-Host "" Write-Host "Azure APP URI Display Name" -ForegroundColor yellow Write-Host "$DashlaneURI" -foregroundcolor green Write-Host "" Write-Host "By Continuing the Azure Application will be created with the above variables" -foregroundcolor yellow Pause Write-Host "Working..." -foregroundcolor green # Create the self signed cert $currentDate = Get-Date $endDate = $currentDate.AddYears(1) $notAfter = $endDate.AddYears(50) $pwd = $pwd $thumb = (New-SelfSignedCertificate -CertStoreLocation cert:\localmachine\my -DnsName win2016-ad.passwordlabs.com -KeyExportPolicy Exportable -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" -NotAfter $notAfter).Thumbprint $pwd = ConvertTo-SecureString -String $pwd -Force -AsPlainText start-sleep -s 5 #Give time to finish the self-signed cert creationg Export-PfxCertificate -cert "cert:\localmachine\my\$thumb" -FilePath $FilePathPFX -Password $pwd_secure_string # Load the certificate $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate("$FilePathPFX", $pwd_secure_string) $keyValue = [System.Convert]::ToBase64String($cert.GetRawCertData()) # Create the Azure Active Directory Application $application = New-AzureADApplication -DisplayName "$DashlaneAppName" -IdentifierUris "$DashlaneURI" New-AzureADApplicationKeyCredential -ObjectId $application.ObjectId -CustomKeyIdentifier "$DashlaneAppName" -StartDate $currentDate -EndDate $endDate -Type AsymmetricX509Cert -Usage Verify -Value $keyValue # Create the Service Principal and connect it to the Application $sp = New-AzureADServicePrincipal -AppId $application.AppId # Give the Service Principal Reader access to the current tenant (Get-AzureADDirectoryRole) $ADDirectoryRoleObjectID = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq 'Company Administrator'} $ADDirectoryRoleObjectID = $ADDirectoryRoleObjectID.ObjectID Add-AzureADDirectoryRoleMember -ObjectId "$ADDirectoryRoleObjectID" -RefObjectId $sp.ObjectId Write-Host "Creating Azure App, this can take up to 60 seconds" -foregroundcolor green start-sleep -s 20 #Give the app a moment to be created # Get Tenant Detail $tenant = Get-AzureADTenantDetail # Now you can login to Azure PowerShell with your Service Principal and Certificate Connect-AzureAD -TenantId $tenant.ObjectId -ApplicationId $sp.AppId -CertificateThumbprint $thumb #Display the Results write-host "" Write-host "" Write-Host "TenantID" -foregroundcolor Yellow Get-AzureADTenantDetail | Ft DisplayName, ObjectID Write-Host "AppID " -ForegroundColor Yellow get-AzureADApplication | Ft DisplayName,AppID Write-Host "Thumbprint for $DashlaneAppName : $Thumb" -ForegroundColor Yellow
- Lorsque vous avez saisi les informations, vous êtes invité à les vérifier et à appuyer sur Entrée pour continuer.
- Le script se termine et fournit des résultats que vous utiliserez dans le script de synchronisation AD.
- Gardez la fenêtre de résultats ouverte et créez un fichier dans PowerShell ISE.
Définir les variables d'environnement
- Copiez le script suivant dans le nouveau fichier dans PowerShell ISE et enregistrez-le sous le nom « Azure-AD-Sync-Script.ps1 ».
# Dashlane Azure AD Sync Script # This script is to be used after you have registered a secure Azure Application to securely connect. #Define your variables $INSTALL_TOKEN = "TextString" #Line 42 from the AD sync script from the Admin Console $TEAM_ID = "NumberString" #Line 43 from your AD sync script from the Admin Console $TenantID = "NumberString" #Your tenantID from the Azure App connection script $AppID = "NumberString" #Your AppID from the Azure app connection script $Thumb = "NumberString" #your Thumbprint ID from the previous script Connect-AzureAD -TenantId $TenantID -ApplicationId $AppID -CertificateThumbprint $thumb #Give a moment for the connection to be established before continuing Start-sleep 10 # Enter each Groups ObjectID that you would like to sync with Dashlane. # caution: filter using the ObjectId values, NOT the friendly DisplayName values # caution: each ObjectId value must be enclosed by double quotation marks # #Groups key. DashlaneUsers = ObjectID # $Groups = @( "GroupObjectID1", "GroupObjectID2" ) $DASHLANE_LOGIN_ATTR = "UserPrincipalName" Import-Module AzureAD Write-Host "Running Dashlane Azure AD synchronization" $GroupMembers = @() $GroupInfos = @() $CSV_TEMP_PATH = $env:TEMP + "dashlane_export.csv" foreach ($Group in $Groups) { Try { $GroupInfo = Get-AzureADGroup -ObjectId $Group | Select DisplayName, ObjectId $GroupInfo | Add-Member Members @() $Members = Get-AzureADGroupMember -Top 1000 -ObjectId $Group | Get-AzureADUser | select UserPrincipalName # Roughly filtering out users with invalid emails. # A user with an invalid email is filtered out by Dashlane servers: it will therefore not # be included in the verified data, which will lead to an invalid signature check if it is # included in the signed data. $ValidMembers = $Members | Where-Object {($_ | Select -ExpandProperty $DASHLANE_LOGIN_ATTR) -like '*@*.*' } $measure = $ValidMembers | measure $count = $measure.count Write-Host "Exporting $count valid members from $Group" -ForegroundColor Green if ($count -gt 0) { foreach ($Member in $ValidMembers) { # Dashlane servers are also downcasing emails, see comment about invalid emails above. $Member = $Member | Select @{ name=$DASHLANE_LOGIN_ATTR; expression={($_ | Select -ExpandProperty $DASHLANE_LOGIN_ATTR).ToLower()} } $Member | Add-Member GroupName $GroupInfo.DisplayName $Member | Add-Member GroupGUID $GroupInfo.ObjectId $DashlaneLogin = $Member | Select -ExpandProperty $DASHLANE_LOGIN_ATTR $GroupMembers += $Member $GroupInfo.Members += $Member } $GroupInfos += $GroupInfo } } Catch { $ErrorMessage = $_.Exception.Message $FailedItem = $_.Exception.GetType().FullName Write-Host "Error: $FailedItem - $ErrorMessage" -ForegroundColor Red Write-Host "Message: It seems there is no account on this Group: $Group." -ForegroundColor Red } } ## writing temp CSV Write-Host "" Write-Host "Writing debug information to $CSV_TEMP_PATH" $GroupMembers | Export-Csv -Path $CSV_TEMP_PATH -NoTypeInformation -Encoding UTF8 # Generate signature Try { $CspParameters = New-Object -TypeName System.Security.Cryptography.CspParameters $CspParameters.KeyContainerName = "DashlaneDirectorySyncKey53" $RSA = New-Object -TypeName System.Security.Cryptography.RSACryptoServiceProvider -ArgumentList $CspParameters $PublicKey = $RSA.ToXmlString($false) $PublicKeyHash = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($PublicKey)) Write-Host "" Write-Host "---------- Provide your Dashlane admin with this key on setup: -----------" Write-Host "" Write-Host $PublicKeyHash -ForegroundColor Green Write-Host "" Write-Host "--------------------------------------------------------------------------" Write-Host "" $RSAFormatter = New-Object -TypeName System.Security.Cryptography.RSAPKCS1SignatureFormatter -ArgumentList $RSA $RSAFormatter.SetHashAlgorithm("SHA256") $DataStr = $TEAM_ID foreach ($GroupInfo in $GroupInfos | Sort-Object -Property ObjectId) { $DataStr += $GroupInfo.ObjectId $DataStr += $GroupInfo.DisplayName foreach ($Member in $GroupInfo.Members | Sort-Object -Property $DASHLANE_LOGIN_ATTR) { $DashlaneLogin = $Member | Select -ExpandProperty $DASHLANE_LOGIN_ATTR $DataStr += $DashlaneLogin } } $DataBytes = [System.Text.Encoding]::UTF8.GetBytes($DataStr) $SHA256 = New-Object -TypeName System.Security.Cryptography.SHA256CryptoServiceProvider $DataHash = $SHA256.ComputeHash($DataBytes) $SignatureBytes = $RSAFormatter.CreateSignature($DataHash) $SignatureHash = [System.Convert]::ToBase64String($SignatureBytes) } Catch { $ErrorMessage = $_.Exception.Message $FailedItem = $_.Exception.GetType().FullName Write-Host "Failed: $FailedItem - $ErrorMessage" -ForegroundColor Red } # Send data to Dashlane $FileContent = Get-Content $CSV_TEMP_PATH | Out-String $FileContentBytes = [System.Text.Encoding]::UTF8.GetBytes($FileContent) $FileContentEncoded = [System.Convert]::ToBase64String($FileContentBytes) [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; $URL = "https://ws1.dashlane.com/1/teamPlans/syncFromDirectory" $Method = "POST" $ContentType = "application/x-www-form-urlencoded" $Payload = @{adLogins=$FileContentEncoded;adToken=$INSTALL_TOKEN;teamId=$TEAM_ID;signature=$SignatureHash;publicKey=$PublicKeyHash} Try { $Response = Invoke-WebRequest -Uri $URL -Method $Method -Body $Payload -ContentType $ContentType Write-Host "Dashlane sync responded with: $Response" -ForegroundColor Green } Catch { $ErrorMessage = $_.Exception.Message $FailedItem = $_.Exception.GetType().FullName Write-Host "" Write-Host "Dashlane sync error: $FailedItem - $ErrorMessage" -ForegroundColor Red } # Cleaning up temp CSV Remove-Item $CSV_TEMP_PATH }
- Connectez-vous à Console.Dashlane.com > Paramètres > Active Directory.
- Activez l'option Autorisation d'accès automatique et synchronisation des groupes
- Cliquez sur le bouton Copier à côté du script AD et collez-le dans un nouvel onglet de PowerShell ISE.
- Enregistrez le fichier sous le nom « Default-AD-Script.ps1 ».
- Trois scripts doivent maintenant être ouverts dans PowerShell ISE, en plus de la fenêtre de résultats.
- Modifiez les lignes 5-9 dans AzureAD-Sync-Script en utilisant les variables d'environnement ci-dessous. Une fois que vous avez saisi les variables, le résultat devrait ressembler à l'image ci-dessus.
$INSTALL_TOKEN = "BIvG4Jd6Y8PWX7Gli0nQAkHYoozzzzzz0CxMncY6dDvm6z5cbWZYVD-"
Ligne 42 de Default-AD-Script$TEAM_ID = "123456"
Ligne 43 de Default-AD-Script$TenantID = "60f8366e-282f-460f-91ef-4zzzbbe6445"
tenantID du script Azure-App-Setup$AppID = "c0023c85-9358-46e7-8a71-aezzzz4c9606"
Résultat de l'AppID dans le script Azure-App-Setup$Thumb = "6BA63A586294299Fzzzzz15939445A115A4C"
Résultat de Thumbprint ID dans le script Azure-App-Setup - Saisissez les groupes Azure que vous voulez synchroniser en utilisant l'ObjectID du groupe sur la ligne 22.
- Exécutez le script et vérifiez que la synchronisation est effectuée.
- Vérifiez que le script renvoie "code":200,"message":"OK" .
- Copiez la chaîne de texte située entre les tirets dans votre presse-papiers.
- Retournez sur http://console.dashlane.com et actualisez la page.
- Dans la fenêtre contextuelle Vérifier la clé de sécurité..., cliquez sur Continuer.
- Collez la chaîne de texte que vous avez copiée à l'étape 10 dans le champ de texte et cliquez sur Vérifier maintenant
- Le tour est joué ! Vous recevrez un message une fois la clé vérifiée
Exécuter le script de synchronisation Azure AD
- Dans la console d'administration, ouvrez l'onglet Utilisateurs et vérifiez que les nouveaux utilisateurs disposent bien du statut Invitation en attente.
- Ouvrez l'onglet Groupes pour voir les groupes qui sont synchronisés.
- Dans la console d'administration, vous pouvez consulter le statut de votre synchronisation AD sous Paramètres > Active Directory.
- Nous vous conseillons d'activer la suppression d'accès automatique après avoir vérifié que tous les utilisateurs synchronisés font partie des groupes de la synchronisation Active Directory.
Programmer une synchronisation régulière grâce au Planificateur de tâches
Une fois le script enregistré sur votre domaine, vous pouvez le programmer de manière à ce qu'il s'exécute automatiquement selon l'intervalle que vous définissez.
Veuillez noter que le compte utilisateur qui exécute cette tâche doit pouvoir lire les unités d'organisation et les comptes utilisateurs dans l'environnement de votre Active Directory.
- Ouvrez le Planificateur de tâches sur un serveur Windows qui exécutera le script.
- Sélectionnez la Bibliothèque du Planificateur de tâches .
- Cliquez sur l'onglet Action dans le menu supérieur à gauche.
- Cliquez ensuite sur Créer une tâche.
- Puis sur l'onglet Général.
- Saisissez Dashlane AD Sync dans le champ de texte intitulé Nom.
- Sélectionnez ensuite Options de sécurité.
- Puis cochez les cases Exécuter même si l'utilisateur n'est pas connecté et Exécuter avec les autorisations maximales.
- Veuillez créer un nouveau déclencheur pour programmer l'exécution du script. Dans l'exemple ci-dessous, il sera exécuté quotidiennement à 1 h.
-
Cliquez ensuite sur l'onglet Actions.
a. Cliquez sur Nouvelle action.
b. Sous Programme/script, saisissez powershell.
c. Sous Ajouter des arguments (facultatif), collez le texte suivant : -file C:\FilePathtoPowershellScript\dashlane-ad-sync.ps1.
Remarques complémentaires
- Une fois la synchronisation configurée, nous vous conseillons de gérer vos groupes et utilisateurs Dashlane uniquement via votre Active Directory.
- Tous les utilisateurs pris en compte par le script doivent posséder une adresse e-mail spécifique dans Active Directory.
- Les administrateurs ne peuvent pas désactiver la totalité des administrateurs, car au moins l'un d'eux doit être actif pour chaque compte professionnel.
- Ils ne peuvent pas non plus désactiver les contacts de facturation, car au moins l'un d'eux doit être actif pour chaque compte professionnel.
- Le nombre d'utilisateurs contenus dans les groupes ciblés par cette synchronisation ne doit pas excéder le nombre de licences disponibles sur votre compte professionnel.