tests/Test-Assessment.21839.ps1

<#
.SYNOPSIS
    Checks if Passkey (FIDO2) authentication method is enabled and configured for users in the tenant.
#>


function Test-Assessment-21839 {
    [ZtTest(
        Category = 'Credential management',
        ImplementationCost = 'Medium',
        Pillar = 'Identity',
        RiskLevel = 'High',
        SfiPillar = 'Protect identities and secrets',
        TenantType = ('Workforce','External'),
        TestId = 21839,
        Title = 'Passkey authentication method enabled',
        UserImpact = 'Low'
    )]
    [CmdletBinding()]
    param()

    Write-PSFMessage '🟦 Start' -Tag Test -Level VeryVerbose

    $activity = 'Checking Passkey authentication method enabled'
    Write-ZtProgress -Activity $activity -Status 'Getting policy'

    # Query FIDO2 authentication method configuration
    $fido2Config = Invoke-ZtGraphRequest -RelativeUri 'authenticationMethodsPolicy/authenticationMethodConfigurations/FIDO2' -ApiVersion beta

    # Check if FIDO2 authentication method is enabled
    $state = $fido2Config.state
    $includeTargets = $fido2Config.includeTargets
    $isAttestationEnforced = $fido2Config.isAttestationEnforced
    $keyRestrictions = $fido2Config.keyRestrictions

    $fido2Enabled = $state -eq 'enabled'
    $hasIncludeTargets = $includeTargets -and $includeTargets.Count -gt 0

    $portalLink = "https://entra.microsoft.com/#view/Microsoft_AAD_IAM/ConfigureAuthMethodsBlade/authMethod~/%7B%22%40odata.type%22%3A%22%23microsoft.graph.fido2AuthenticationMethodConfiguration%22%2C%22id%22%3A%22Fido2%22%2C%22state%22%3A%22enabled%22%2C%22isSelfServiceRegistrationAllowed%22%3Atrue%2C%22isAttestationEnforced%22%3Afalse%2C%22excludeTargets%22%3A%5B%7B%22id%22%3A%2243b7bc87-77eb-4263-abad-e3c2478f0a35%22%2C%22targetType%22%3A%22group%22%2C%22displayName%22%3A%22eam-block-user%22%7D%5D%2C%22keyRestrictions%22%3A%7B%22isEnforced%22%3Afalse%2C%22enforcementType%22%3A%22allow%22%2C%22aaGuids%22%3A%5B%22de1e552d-db1d-4423-a619-566b625cdc84%22%2C%2290a3ccdf-635c-4729-a248-9b709135078f%22%2C%2277010bd7-212a-4fc9-b236-d2ca5e9d4084%22%2C%22b6ede29c-3772-412c-8a78-539c1f4c62d2%22%2C%22ee041bce-25e5-4cdb-8f86-897fd6418464%22%2C%2273bb0cd4-e502-49b8-9c6f-b59445bf720b%22%5D%7D%2C%22includeTargets%40odata.context%22%3A%22https%3A%2F%2Fgraph.microsoft.com%2Fbeta%2F%24metadata%23policies%2FauthenticationMethodsPolicy%2FauthenticationMethodConfigurations('Fido2')%2Fmicrosoft.graph.fido2AuthenticationMethodConfiguration%2FincludeTargets%22%2C%22includeTargets%22%3A%5B%7B%22targetType%22%3A%22group%22%2C%22id%22%3A%22all_users%22%2C%22isRegistrationRequired%22%3Afalse%7D%5D%2C%22enabled%22%3Atrue%2C%22target%22%3A%22All%20users%2C%20excluding%201%20group%22%2C%22isAllUsers%22%3Atrue%2C%22voiceDisabled%22%3Afalse%7D/canModify~/true/voiceDisabled~/false/userMemberIds~/%5B%5D/userId/1ce4078f-f795-4baf-aa55-1fdfcc2ebfe6/isCiamTenant~/false/isCiamTrialTenant~/false"

    # Build details section for markdown (bulleted list)
    $mdInfo = "`n## [Passkey authentication method details]($portalLink)`n"
    $isEnabled = $state -eq 'enabled'
    $statusDisplay = if ($isEnabled) {
        "Enabled ✅"
    }
    else {
        "Disabled ❌"
    }
    $mdInfo += "- **Status** : $statusDisplay`n"

    if ($isEnabled) {
        # Don't show details of passkey configuration if it is disabled.
        $mdInfo += "- **Include targets** : "
        if ($includeTargets) {
            $mdInfo += ($includeTargets | ForEach-Object { Get-ZtAuthenticatorFeatureSettingTarget -Target $_ }) -join ', '
        }
        else {
            $mdInfo += 'None'
        }
        $mdInfo += "`n"
        $mdInfo += "- **Enforce attestation** : $isAttestationEnforced`n"
        if ($null -ne $keyRestrictions) {
            $mdInfo += "- **Key restriction policy** :`n"
            if ($null -ne $keyRestrictions.isEnforced) {
                $mdInfo += " - **Enforce key restrictions** : $($keyRestrictions.isEnforced)`n"
            }
            else {
                $mdInfo += " - **Enforce key restrictions** : Not configured`n"
            }
            if ($null -ne $keyRestrictions.EnforcementType) {
                $mdInfo += " - **Restrict specific keys** : $((Get-Culture).TextInfo.ToTitleCase($keyRestrictions.EnforcementType.ToLower()))`n"
            }
            else {
                $mdInfo += " - **Restrict specific keys** : Not configured`n"
            }
        }
    }

    if ($fido2Enabled -and $hasIncludeTargets) {
        $passed = $true
        $testResultMarkdown = "Passkey authentication method is enabled and configured for users in your tenant.$mdInfo"
    }
    else {
        $passed = $false
        $testResultMarkdown = "Passkey authentication method is not enabled or not configured for any users in your tenant.$mdInfo"
    }

    $params = @{
        TestId = '21839'
        Status = $passed
        Result = $testResultMarkdown
    }

    Add-ZtTestResultDetail @params
}