Skip to content
Go back

Autenticação Sem Palavra-passe

Published:  at  10:00 AM

Àndice

AutenticaçÀo Sem Palavra-passe: O Futuro da Segurança

A autenticaçÀo sem palavra-passe (passwordless) representa o futuro da segurança de identidade. Identificar quais utilizadores jÀ¡ possuem métodos de autenticaçÀo sem palavra-passe configurados é essencial para:

IdentificaçÀo via Microsoft Graph

Para identificar utilizadores capazes de autenticaçÀo sem palavra-passe:

# Ligar ao Microsoft Graph
Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All"

# Obter todos os utilizadores
$users = Get-MgUser -All

# Array para resultados
$passwordlessUsers = @()

foreach ($user in $users) {
    # Obter métodos de autenticaçÀo do utilizador
    $authMethods = Get-MgUserAuthenticationMethod -UserId $user.Id
    
    # Verificar métodos de autenticaçÀo sem palavra-passe
    $passwordlessMethods = $authMethods | Where-Object {
        $_.AdditionalProperties.'@odata.type' -in @(
            '#microsoft.graph.fido2AuthenticationMethod', 
            '#microsoft.graph.windowsHelloForBusinessAuthenticationMethod',
            '#microsoft.graph.microsoftAuthenticatorAuthenticationMethod'
        )
    }
    
    # Se tiver pelo menos um método sem palavra-passe, é capaz de autenticaçÀo passwordless
    $isPasswordlessCapable = $passwordlessMethods.Count -gt 0
    
    # Tipos de métodos sem palavra-passe
    $methodTypes = @{
        'FIDO2' = 0
        'WindowsHello' = 0
        'Authenticator' = 0
    }
    
    foreach ($method in $passwordlessMethods) {
        $type = $method.AdditionalProperties.'@odata.type'
        
        if ($type -eq '#microsoft.graph.fido2AuthenticationMethod') {
            $methodTypes['FIDO2']++
        }
        elseif ($type -eq '#microsoft.graph.windowsHelloForBusinessAuthenticationMethod') {
            $methodTypes['WindowsHello']++
        }
        elseif ($type -eq '#microsoft.graph.microsoftAuthenticatorAuthenticationMethod') {
            $methodTypes['Authenticator']++
        }
    }
    
    $passwordlessUsers += [PSCustomObject]@{
        DisplayName = $user.DisplayName
        UserPrincipalName = $user.UserPrincipalName
        IsLicensed = $user.AssignedLicenses.Count -gt 0
        PasswordlessCapable = $isPasswordlessCapable
        TotalPasswordlessMethods = $passwordlessMethods.Count
        FIDO2Keys = $methodTypes['FIDO2']
        WindowsHelloDevices = $methodTypes['WindowsHello']
        AuthenticatorApp = $methodTypes['Authenticator']
    }
}

# Apresentar utilizadores capazes de autenticaçÀo sem palavra-passe
$passwordlessUsers | 
    Where-Object { $_.PasswordlessCapable } |
    Sort-Object -Property DisplayName | 
    Format-Table DisplayName, UserPrincipalName, TotalPasswordlessMethods, FIDO2Keys, WindowsHelloDevices, AuthenticatorApp -AutoSize

AnÀ¡lise de AdoçÀo por Método

Para analisar a adoçÀo dos diferentes métodos de autenticaçÀo sem palavra-passe:

# EstatÀ­sticas de métodos passwordless
$totalUsers = $passwordlessUsers.Count
$passwordlessCapableUsers = ($passwordlessUsers | Where-Object { $_.PasswordlessCapable }).Count
$percentPasswordless = [math]::Round(($passwordlessCapableUsers / $totalUsers) * 100, 2)

$fido2Users = ($passwordlessUsers | Where-Object { $_.FIDO2Keys -gt 0 }).Count
$percentFido2 = [math]::Round(($fido2Users / $totalUsers) * 100, 2)

$whfbUsers = ($passwordlessUsers | Where-Object { $_.WindowsHelloDevices -gt 0 }).Count
$percentWhfb = [math]::Round(($whfbUsers / $totalUsers) * 100, 2)

$authenticatorUsers = ($passwordlessUsers | Where-Object { $_.AuthenticatorApp -gt 0 }).Count
$percentAuthenticator = [math]::Round(($authenticatorUsers / $totalUsers) * 100, 2)

# Apresentar relatório
Write-Output "=== Relatório de AdoçÀo de AutenticaçÀo Sem Palavra-passe ==="
Write-Output "Total de Utilizadores: $totalUsers"
Write-Output "Utilizadores Capazes de AutenticaçÀo Sem Palavra-passe: $passwordlessCapableUsers ($percentPasswordless%)"
Write-Output ""
Write-Output "AdoçÀo por Método:"
Write-Output "- Chaves FIDO2: $fido2Users utilizadores ($percentFido2%)"
Write-Output "- Windows Hello: $whfbUsers utilizadores ($percentWhfb%)"
Write-Output "- Microsoft Authenticator: $authenticatorUsers utilizadores ($percentAuthenticator%)"

UtilizaçÀo em Conjunto com PolÀ­ticas de Acesso Condicional

Para maximizar o impacto da autenticaçÀo sem palavra-passe, combine esta anÀ¡lise com polÀ­ticas de Acesso Condicional:

# Ligar ao Microsoft Graph com permiss˵es adicionais
Connect-MgGraph -Scopes "User.Read.All", "UserAuthenticationMethod.Read.All", "Policy.Read.All"

# Obter todas as polÀ­ticas de Acesso Condicional
$policies = Get-MgIdentityConditionalAccessPolicy

# Verificar quais polÀ­ticas requerem autenticaçÀo forte
$authPolicies = $policies | Where-Object {
    $_.GrantControls.BuiltInControls -contains "requireMultifactorAuthentication" -or
    $_.GrantControls.AuthenticationStrength.Id -ne $null
}

# Apresentar polÀ­ticas que podem exigir autenticaçÀo sem palavra-passe
$authPolicies | Format-Table DisplayName, State, `
    @{Name="RequiresMFA"; Expression={$_.GrantControls.BuiltInControls -contains "requireMultifactorAuthentication"}}, `
    @{Name="AuthStrength"; Expression={$_.GrantControls.AuthenticationStrength.DisplayName}} -AutoSize

ConsideraçÀµes Importantes

Melhores PrÀ¡ticas


Suggest Changes

Previous Post
Utilizadores Apenas em Cloud
Next Post
Utilizadores Capazes de MFA