Tester un mot de passe
Il est parfois nécessaire de tester des identifiants Active Directory afin de valider la conformité du login ou du mot de passe. Par exemple suite à la création en masse d’utilisateurs.
Les actions les plus souvent utilisées pour tester sont la connexion à un bureau à distance (RDP) ou la connexion à un webmail. Cependant, soit le nombre d’identifiants à tester est trop important, soit aucun service n’est accessible pour tester une authentification.
PowerShell à la rescousse
Attention de ne pas tester des authentifications en boucle avec un mauvais mot de passe, sinon cela peut engendrer un verrouillage du compte AD.
PowerShell permet de tester des authentifications login/mot de passe auprès d’un Active Directory avec l’une de ces deux méthodes :
$UserName = 'xxxx' $Password = 'yyyy' Function Test-ADAuthentication { param( $username, $password) (New-Object DirectoryServices.DirectoryEntry "",$username,$password).psbase.name -ne $null } Test-ADAuthentication -username $UserName -password $password
ou une fonction avancée si vous devez tester sur un autre domaine :
function Test-ADAuthentication { Param( [Parameter(Mandatory)] [string]$User, [Parameter(Mandatory)] $Password, [Parameter(Mandatory = $false)] $Server, [Parameter(Mandatory = $false)] [string]$Domain = $env:USERDOMAIN ) Add-Type -AssemblyName System.DirectoryServices.AccountManagement $contextType = [System.DirectoryServices.AccountManagement.ContextType]::Domain $argumentList = New-Object -TypeName "System.Collections.ArrayList" $null = $argumentList.Add($contextType) $null = $argumentList.Add($Domain) if($null -ne $Server){ $argumentList.Add($Server) } $principalContext = New-Object System.DirectoryServices.AccountManagement.PrincipalContext -ArgumentList $argumentList -ErrorAction SilentlyContinue if ($null -eq $principalContext) { Write-Warning "$Domain\$User - AD Authentication failed" } if ($principalContext.ValidateCredentials($User, $Password)) { Write-Host -ForegroundColor green "$Domain\$User - AD Authentication OK" } else { Write-Warning "$Domain\$User - AD Authentication failed" } } #Test-ADAuthentication -User toto -Password passXX #Test-ADAuthentication -User toto -Password passXX -Server xxx.domain.com
Les valeurs de retour sont :
- TRUE si l’authentification a réussi
- FALSE si l’authentification a échoué. L’échec peut être dû à :
- mauvais login. Vérifier si l’utilisateur existe
- mauvais mot de passe
- compte AD verrouillé : Get-ADUser -Identity xxx -Properties LockedOut,AccountLockoutTime | Select samaccountname,LockedOut,AccountLockoutTime
- compte AD désactivé : Get-ADUser -Identity xxxx | Select samaccountname,Enabled
Pingback: ITPro-Tips – Active Directory – Test AD authentication via PowerShell