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.
Le script a été testé pour une authentification NTLM avec domain\sAMAccountName. L'authentification Kerberos n'a pas été testée. Ces méthodes peuvent ne pas fonctionner pour les utilisateurs du groupe 'Protected Users' ou si NTLM a été désactivé.
Le script a été testé pour une authentification NTLM avec domain\sAMAccountName. L'authentification Kerberos n'a pas été testée. Ces méthodes peuvent ne pas fonctionner pour les utilisateurs du groupe 'Protected Users' ou si NTLM a été désactivé.
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,Enable
Clap
Comments