Passwordless Authenticatie Voor Microsoft 365 En Entra ID

💼 Management Samenvatting

Passwordless authenticatie is de snelste manier om identiteiten te beveiligen tegen moderne aanvallen omdat wachtwoorden volledig verdwijnen en worden vervangen door phishing-resistente methoden. Door cryptografie direct op het apparaat toe te passen ontstaat een context waarin gestolen credentials geen waarde meer hebben en waarin gebruikers minder frictie ervaren.

Aanbeveling
IMPLEMENT
Risico zonder
Hoog
Risk Score
8/10
Implementatie
200u (tech: 120u)
Van toepassing op:
Microsoft 365
Entra ID
Windows Hello for Business

Nederlandse overheidsorganisaties hebben te maken met continu veranderende dreigingen, strengere toezichthouders en een hybride workforce die overal kan werken. Wachtwoorden vormen daarbij steevast de zwakste schakel. Criminelen combineren generatieve phishing, sessieovername en sociaal-engineering met gelekte wachtwoordlijsten, waardoor zelfs organisaties met MFA incidenten blijven ervaren. Passwordless authenticatie doorbreekt dit patroon doordat authenticatie is gekoppeld aan hardwarekenmerken of biometrie op het device en geen gedeeld geheim meer gebruikt.

PowerShell Modules Vereist
Primary API: Microsoft Graph PowerShell (beta profiel)
Connection: Connect-MgGraph -Scopes Policy.Read.All, UserAuthenticationMethod.Read.All, AuditLog.Read.All
Required Modules: Microsoft.Graph.Authentication, Microsoft.Graph.Beta.Identity.SignIns

Implementatie

Dit artikel beschrijft hoe bestuurders, CISO's en technische teams een passwordless strategie ontwerpen, implementeren en aantoonbaar borgen binnen Microsoft 365 en Entra ID. U krijgt concrete richtlijnen voor architectuurkeuzes, uitrolscenario's, monitoring, remediatie en het gebruik van het bijbehorende PowerShell-script dat debugruns ondersteunt zodat lokale tests altijd onder de vijftien seconden blijven.

Strategische urgentie en maatschappelijke context

Passwordless authenticatie markeert meer dan een technische upgrade; het is een bestuurlijke keuze om identiteiten structureel te beschermen tegen het complete spectrum aan geavanceerde dreigingen waarmee Nederlandse overheden tegenwoordig worden geconfronteerd. Terwijl phishing-kits met realtime proxying sessies kapen en criminelen via generatieve AI overtuigende social-engineeringcampagnes maken, blijven wachtwoorden het gemakkelijkste aanvalspunt. Door over te stappen op methoden die cryptografisch aan een fysiek apparaat of biometrische meting zijn gekoppeld, wordt die kwetsbare component volledig verwijderd. Besturen die nu besluiten tot een wachtwoordloze strategie laten zien dat zij Zero Trust niet als modewoord maar als structureel uitgangspunt hanteren en dat zij hun burgers kunnen garanderen dat vertrouwelijke registraties niet afhankelijk zijn van menselijke gokwoorden.

De regelgeving versterkt deze urgentie. Zowel de BIO als NIS2 vragen om aantoonbare maatregelen die credential-gebaseerde aanvallen uitsluiten. Daarnaast scherpen toezichthouders zoals de Algemene Rekenkamer en de Autoriteit Persoonsgegevens hun toetsingskaders aan door bij audits expliciet te vragen naar phishing-resistente authenticatie. Passwordless authenticatie levert hiervoor het harde bewijs: FIDO2 sleutels bewaren de private key lokaal, Windows Hello for Business koppelt biometrie aan de TPM en Microsoft Authenticator valideert elke handeling op het toestel zelf. Daarmee wordt het juridisch verdedigbaar om toegang te verlenen tot hooggeclassificeerde informatie, zelfs wanneer medewerkers vanaf huis of onderweg werken.

Naast veiligheid draait passwordless authenticatie om dienstverlening. Overheidsorganisaties hebben duizenden medewerkers en ketenpartners die dagelijks meerdere keren inloggen. Elke vergeten wachtwoord of blokkade kost servicedesks tijd en vertraagt besluitvorming. Door inlogprocessen te vereenvoudigen met biometrie of hardware sleutels dalen de incidenten en wordt de gebruikerservaring vergelijkbaar met de beste consumentenapps. Dit past bij de bredere digitaliseringsagenda waarbij de overheid net zo soepel wil aanvoelen als moderne platforms, maar met hogere beveiligingsnormen. Het vrijgekomen servicedeskbudget kan worden ingezet voor security awareness of innovatieprojecten in plaats van voor reset scripts.

De maatschappelijke context tenslotte vraagt om vertrouwen en uitlegbaarheid. Passwordless authenticatie is transparant uit te leggen aan ondernemingsraden, privacy officers en externe toezichthouders: er worden geen biometrische gegevens naar de cloud verzonden en fysieke keys kunnen worden uitgegeven via bestaande logistieke processen. Door stakeholders vanaf het eerste programmaplan te betrekken ontstaat een gedeeld begrip dat wachtwoordloos werken niet louter een ICT-ingreep is, maar een cultuurverandering waarbij gedrag, tooling en governance elkaar versterken. Organisaties die dit narratief consequent uitdragen, creëren draagvlak voor aanvullende Zero Trust-maatregelen die de komende jaren noodzakelijk worden.

Architectuurkeuzes en technische bouwstenen

Een robuuste passwordless architectuur begint met het vastleggen van duidelijke trust anchors: welke apparaten, identiteitsproviders en beheerpaden worden als betrouwbaar beschouwd en onder welke voorwaarden. Microsoft Entra ID fungeert als centraal authenticatieplatform, maar moet worden uitgebreid met beleid dat hardware-eigenschappen valideert, attestation eist en lifecyclemanagement automatiseert. Door authentication strengths te definiëren kunnen architecten de gewenste zekerheid koppelen aan applicaties of groepen, bijvoorbeeld door voor Rijksdossiers uitsluitend phishing-resistente methoden toe te staan. Dit vereist een nauwe samenhang tussen identiteitsbeheer, device management via Intune en logging in Microsoft Sentinel.

FIDO2 security keys vormen de gouden standaard voor scenario's waarin de hoogste betrouwbaarheid is vereist. Architecten moeten vastleggen welke leveranciers zijn toegestaan, hoe sleutels worden gedistribueerd en op welke wijze attestation wordt gevalideerd. Door AAGUID-whitelists in te richten voorkomt u dat onbeveiligde consumentensleutels worden geregistreerd. Ook moet worden bepaald welke processen gelden bij verlies of defect: een combinatie van zelfservice, identity proofing en escalatie naar het SOC. Omdat FIDO2 sleutels gebruikmaken van public key cryptografie is er geen gedeeld geheim; zelfs als een sleutel wordt gestolen zonder PIN kan hij niet op afstand worden misbruikt, wat een grote stap is richting resilient identity-design.

Windows Hello for Business vult dit aan voor beheerde Windows-apparaten. Architectuurprincipes moeten beschrijven hoe hybride omgevingen worden ondersteund, hoe TPM-vereisten worden afgedwongen en hoe biometrische sjablonen lokaal en privacyvriendelijk blijven. Integratie met Credential Guard, virtualization-based security en automatische enrollments via Intune maken het mogelijk om passwordless standaard mee te leveren bij elke werkplekvervanging. Het beleid moet verder ingaan op fallback-scenario's, bijvoorbeeld het tijdelijk toestaan van een PIN wanneer biometrie niet werkt, en hoe deze uitzonderingen worden gelogd en binnen een korte termijn weer worden gesloten.

Microsoft Authenticator zorgt voor brede dekking bij mobiele medewerkers en BYOD. Architectuurdocumenten moeten toelichten hoe mobiele applicatiebeveiliging, number matching en applicatienaamweergave worden gecombineerd om push-bombing tegen te gaan. Daarnaast moet worden beschreven hoe fraud alerts worden afgehandeld, hoe apparaten periodiek worden geherevalueerd en hoe parallelle authenticatiemethoden (zoals tijdelijke SMS) structureel worden uitgefaseerd. Door deze drie methoden te combineren ontstaat een architectuur die geschikt is voor topsecret processen én voor dagelijkse samenwerking met gemeenten, provincies en ketenpartners.

Roadmap van voorbereiding tot volledige uitrol

Een succesvolle passwordless-implementatie begint met een grondige nulmeting. Inventariseer hoeveel accounts nog enkelvoudige authenticatie gebruiken, welke applicaties legacy-protocollen vereisen en welke afhankelijkheden bestaan richting externe leveranciers. Leg vast welke processen kritiek zijn voor de continuïteit zodat u tijdens de uitrol nooit alle authenticatiepaden gelijktijdig wijzigt. Deze analyse vormt de basis voor de architectuur en het communicatieplan en levert de data waarmee bestuurders budget en capaciteit kunnen vrijmaken.

Vervolgens start een pilotfase met duidelijke succescriteria. Selecteer vertegenwoordigers uit CISO-office, primair proces en ondersteunende diensten zodat u alle gebruiksscenario's afdekt. Documenteer elke bevinding, hoe klein ook, zodat latere uitrolteams profiteren van dezelfde kennis. Door registratiecampagnes te koppelen aan incentives, zoals snellere toegang tot cloudwerkplekken of minder vaak opnieuw aanmelden, ervaart de pilotgroep direct de voordelen. Parallel controleert u of helpdeskscripts, selfserviceportalen en knowledge base-artikelen voldoende zijn aangepast aan de wachtwoordloze werkelijkheid.

De schaalfase vereist strakke regie. Werk met ring-gebaseerde uitrols waves en stuur op objectieve metrics zoals percentage geregistreerde gebruikers, aantal actieve FIDO2 keys en reductie van wachtwoordtickets. Koppel elke wave aan een go/no-go moment waarbij u heldere criteria hanteert voor gebruikerstevredenheid, technische stabiliteit en audittrail-volledigheid. Door Conditional Access policies in "report-only" te draaien voordat ze verplicht worden, kunt u impact nauwkeurig voorspellen zonder de operatie te verstoren.

Tot slot borgt u de transitie in de organisatiecultuur. Neem passwordless authenticatie op in onboarding, contracten met leveranciers en exit-processen zodat sleutels en apparaten altijd worden ingeleverd of ongeldig gemaakt. Organiseer periodieke evaluaties met ondernemingsraad en privacy officers om te laten zien dat gebruikersrechten worden gerespecteerd, bijvoorbeeld doordat biometrie nooit buiten het device komt. Een roadmap eindigt pas wanneer passwordless het nieuwe normaal is en wachtwoorden uitsluitend nog als tijdelijke fallback bestaan met strikte monitoring en automatische afbouw.

Operationalisering, monitoring en bewijsvoering

Gebruik PowerShell-script passwordless-authentication.ps1 (functie Invoke-PasswordlessMonitoring) – Voert een snelle debug- of productiecontrole uit op ingeschakelde passwordless methoden, Conditional Access policies en adoptiegraad en kan resultaten naar JSON rapporteren..

Monitoring begint bij het definiëren van meetbare indicatoren: percentage accounts met minstens één phishing-resistente methode, aantal actieve FIDO2 sleutels per organisatieonderdeel, aantal aanmeldingen dat alsnog een wachtwoord gebruikt en gemiddelde tijd tussen key-uitgifte en registratie. Door deze indicatoren dagelijks uit Microsoft Graph te halen ontstaat een levend dashboard waarmee security officers afwijkingen binnen uren zien in plaats van pas tijdens een audit. Het script in deze repository ondersteunt dit door dezelfde query's in debugmodus te simuleren, zodat tests altijd binnen vijftien seconden kunnen draaien zonder productie-API's te benaderen.

Naast cijfers is kwalitatieve monitoring nodig. Koppel passwordless-statistieken aan SOC-use cases zodat verdachte patronen, zoals een plotselinge daling van passwordless-registraties in een business unit, direct een incident genereren. Combineer dit met feedback uit de servicedesk om te zien of gebruikers nog fallback-methoden nodig hebben en of aanvullende trainingen noodzakelijk zijn. Door deze inzichten in maandelijkse security-rapportages te verwerken kan het bestuur aantonen dat passwordless volwassen wordt beheerd.

Bewijsvoering richting auditors vraagt om reproduceerbare rapporten. Archiveer exports van Authentication Methods policies, Conditional Access policies, registratierapportages per groep en logboeken van sleutelbeheer. Documenteer uitzonderingsprocessen, bijvoorbeeld wanneer een rechter tijdelijk van wachtwoordgebruik afhankelijk is vanwege gerechtelijke voorschriften. Door het artikel, het script en het governanceproces aan elkaar te koppelen ontstaat een geïntegreerde keten waarbij beleid, controle en bewijsvoering op elkaar aansluiten.

Tot slot moet monitoring aansluiten op crisisscenario's. Beschrijf hoe u handelt wanneer een reeks hardware-sleutels wordt teruggeroepen of wanneer een kwetsbaarheid in een biometrische sensor wordt ontdekt. Door vooraf procedures te definiëren voor massale vervanging, snelle communicatie en tijdelijke opschaling van supportteams voorkomt u improvisatie onder druk. Monitoring levert in zo'n geval de gegevens waarmee u direct weet welke groepen moeten worden aangeschreven en welke policies tijdelijk moeten worden aangepast.

Remediatie en continue verbetering

Gebruik PowerShell-script passwordless-authentication.ps1 (functie Invoke-PasswordlessRemediation) – Geeft beheerteams een uitgeschreven stappenplan om hiaten in passwordless beleid sneller te sluiten en lessons learned vast te leggen..

Remediatie begint met transparantie: zodra uit monitoring blijkt dat een methode is uitgeschakeld of dat een business unit achterloopt, wordt dit meteen besproken in het identity-governanceoverleg. Het plan beschrijft wie eigenaar is van de maatregel, welke middelen nodig zijn en welke risico's geaccepteerd of gemitigeerd worden. Door remediatie op te nemen in het reguliere CAB-proces wordt voorkomen dat passwordless als los project wordt gezien; het is een doorlopende verplichting met duidelijke servicelevels.

Continue verbetering betekent dat u inzichten uit pen-tests, threat intelligence en incidenten vertaalt naar concrete wijzigingen. Wanneer criminelen nieuwe technieken ontwikkelen om push-notificaties te misbruiken, past u direct de configuratie van Microsoft Authenticator aan en communiceert u naar gebruikers waarom zij een extra bevestiging zien. Als audits wijzen op gebrekkige documentatie, voegt u automatische rapportgeneratie toe aan het script en borgt u versies in uw documentmanagementsysteem.

Evaluaties moeten minimaal elk kwartaal plaatsvinden. Daarin vergelijkt u de oorspronkelijke business case met de actuele cijfers: zijn de helpdesk-tickets daadwerkelijk gedaald, is de adoptie bij externe ketenpartners op niveau en waar hapert de gebruikerservaring. Op basis van deze evaluaties kan het bestuur besluiten om aanvullende investeringen te doen, bijvoorbeeld in mobiele sleutelkluizen, identiteitsbewijzen voor contractors of integratie met fysieke toegangssystemen zodat één kaart zowel gebouwen als systemen ontsluit.

Door remediatie en verbetering in dezelfde workflow te houden ontstaan korte leercycli. Elk incident levert lessons learned op die direct worden vertaald naar aangepaste beleidsbladen, geactualiseerde handleidingen en updates van het script. Dit houdt het programma levend en zorgt ervoor dat passwordless authenticatie niet terugvalt naar een papieren werkelijkheid maar een tastbaar onderdeel blijft van de Nederlandse Baseline voor Veilige Cloud.

Compliance & Frameworks

Automation

Gebruik het onderstaande PowerShell script om deze security control te monitoren en te implementeren. Het script bevat functies voor zowel monitoring (-Monitoring) als remediation (-Remediation).

PowerShell
<# .SYNOPSIS Passwordless authenticatie monitoren en remediëren voor Microsoft 365 en Entra ID. .DESCRIPTION Controleert of passwordless authenticatiemethoden (FIDO2, Windows Hello for Business en Microsoft Authenticator) zijn ingeschakeld, of er Conditional Access policies bestaan met passende authentication strengths en hoe groot de adoptiegraad is onder gebruikers. Het script ondersteunt DebugMode zodat lokale tests altijd binnen vijftien seconden kunnen worden uitgevoerd zonder verbinding met Microsoft Graph. Functies: - Invoke-PasswordlessMonitoring: levert een beoordeling met issues en statistieken. - Invoke-PasswordlessRemediation: beschrijft stappen om hiaten te herstellen. - Write-PasswordlessReport: schrijft JSON-rapporten voor audits of dashboards. .NOTES Project : Nederlandse Baseline voor Veilige Cloud Filename: passwordless-authentication.ps1 Version : 2.0 (27-11-2025) Modules : Microsoft.Graph.Authentication Scopes : Policy.Read.All, UserAuthenticationMethod.Read.All, AuditLog.Read.All .EXAMPLE .\passwordless-authentication.ps1 -Monitoring -DebugMode Voert een snelle controle uit met gesimuleerde data voor lokale tests. .EXAMPLE .\passwordless-authentication.ps1 -Monitoring -ReportPath .\rapporten\passwordless.json Voert een productiecontrole uit en schrijft de resultaten weg naar JSON. .EXAMPLE .\passwordless-authentication.ps1 -Remediation Toont een stappenplan voor herstelmaatregelen. #> #Requires -Version 5.1 #Requires -Modules Microsoft.Graph.Authentication [CmdletBinding()] param( [switch]$Monitoring, [switch]$Remediation, [switch]$DebugMode, [string]$ReportPath ) if (-not ($Monitoring -or $Remediation)) { $Monitoring = $true } $ErrorActionPreference = 'Stop' $VerbosePreference = if ($DebugMode) { 'Continue' } else { 'SilentlyContinue' } $script:GraphConnected = $false function Write-PasswordlessHeader { Write-Host "`n========================================" -ForegroundColor Cyan Write-Host "Passwordless Authenticatie Toolkit" -ForegroundColor Cyan Write-Host "Nederlandse Baseline voor Veilige Cloud" -ForegroundColor Cyan Write-Host "========================================`n" -ForegroundColor Cyan } function Test-RequiredModules { param( [Parameter(Mandatory = $true)] [string[]]$ModuleNames ) foreach ($module in $ModuleNames) { if (-not (Get-Module -ListAvailable -Name $module -ErrorAction SilentlyContinue)) { throw "Vereiste module '$module' is niet geïnstalleerd. Installeer deze via Install-Module $module -Scope CurrentUser." } } } function Ensure-PasswordlessGraphConnection { param([switch]$DebugMode) if ($DebugMode -or $script:GraphConnected) { return } Test-RequiredModules -ModuleNames @('Microsoft.Graph.Authentication') Write-Verbose "Verbinding maken met Microsoft Graph..." Connect-MgGraph -NoWelcome -Scopes 'Policy.Read.All','UserAuthenticationMethod.Read.All','AuditLog.Read.All' | Out-Null Select-MgProfile -Name beta $script:GraphConnected = $true } function Disconnect-PasswordlessGraph { if ($script:GraphConnected) { Disconnect-MgGraph -ErrorAction SilentlyContinue $script:GraphConnected = $false } } function Invoke-PasswordlessGraphRequest { param( [Parameter(Mandatory = $true)][string]$Uri ) $results = @() $next = $Uri while ($next) { $response = Invoke-MgGraphRequest -Method GET -Uri $next -OutputType PSObject if ($response.value) { $results += $response.value $next = $response.'@odata.nextLink' } else { $results += $response $next = $null } } return $results } function Get-PasswordlessMethods { param([switch]$DebugMode) if ($DebugMode) { return @( [PSCustomObject]@{ Id = 'Fido2'; Name = 'FIDO2 security keys'; Enabled = $true; Attestation = 'required'; SelfService = $true }, [PSCustomObject]@{ Id = 'WindowsHelloForBusiness'; Name = 'Windows Hello for Business'; Enabled = $true; Attestation = 'deviceTPM'; SelfService = $true }, [PSCustomObject]@{ Id = 'MicrosoftAuthenticator'; Name = 'Microsoft Authenticator passwordless'; Enabled = $true; NumberMatching = $true; AppNameDisplay = $true } ) } Ensure-PasswordlessGraphConnection -DebugMode:$DebugMode $uri = 'https://graph.microsoft.com/beta/authenticationMethodsPolicy/authenticationMethodConfigurations' $configs = Invoke-PasswordlessGraphRequest -Uri $uri $mapped = @() foreach ($config in $configs) { $mapped += [PSCustomObject]@{ Id = $config.id Name = $config.displayName Enabled = ($config.state -eq 'enabled') Attestation = $config.isAttestationEnforced SelfService = $config.isSelfServiceRegistrationAllowed NumberMatching = if ($config.featureSettings) { $config.featureSettings.numberMatchingRequiredState.state } else { $null } AppNameDisplay = if ($config.featureSettings) { $config.featureSettings.displayAppNameRequiredState.state } else { $null } } } return $mapped } function Get-PasswordlessConditionalAccess { param([switch]$DebugMode) if ($DebugMode) { return @( [PSCustomObject]@{ Id = 'ca-passwordless'; Name = 'CA - passwordless verplicht'; State = 'enabled'; AuthenticationStrength = 'Passwordless'; Target = 'AllUsers' } ) } Ensure-PasswordlessGraphConnection -DebugMode:$DebugMode $uri = 'https://graph.microsoft.com/beta/identity/conditionalAccess/policies?$select=id,displayName,state,conditions,grantControls' $policies = Invoke-PasswordlessGraphRequest -Uri $uri $result = @() foreach ($policy in $policies) { $strength = $null if ($policy.grantControls -and $policy.grantControls.authenticationStrength) { $strength = $policy.grantControls.authenticationStrength.displayName } elseif ($policy.grantControls -and $policy.grantControls.builtInControls -contains 'requirePasswordless') { $strength = 'Passwordless (built-in)' } if ($strength) { $result += [PSCustomObject]@{ Id = $policy.id Name = $policy.displayName State = $policy.state AuthenticationStrength = $strength Target = if ($policy.conditions -and $policy.conditions.users) { $policy.conditions.users.includeUsers } else { 'n/a' } } } } return $result } function Get-PasswordlessUserSample { param([switch]$DebugMode) if ($DebugMode) { return [PSCustomObject]@{ TotalUsers = 120 SampledUsers = 40 RegisteredUsers = 34 Percentage = 85 MethodBreakdown = @{ FIDO2 = 18; WindowsHello = 10; Authenticator = 12 } MissingUsers = @('contractor1@example.gov', 'extern2@example.gov') } } Ensure-PasswordlessGraphConnection -DebugMode:$DebugMode $maxSample = 200 $users = @() $uri = "https://graph.microsoft.com/v1.0/users?`$select=id,userPrincipalName,displayName,accountEnabled&`$top=$maxSample" $users = Invoke-PasswordlessGraphRequest -Uri $uri | Where-Object { $_.accountEnabled } if (-not $users) { return [PSCustomObject]@{ TotalUsers = 0; SampledUsers = 0; RegisteredUsers = 0; Percentage = 0; MethodBreakdown = @{ }; MissingUsers = @() } } $sample = $users | Select-Object -First $maxSample $registered = 0 $missing = @() $breakdown = @{ FIDO2 = 0; WindowsHello = 0; Authenticator = 0 } foreach ($user in $sample) { try { $methods = Invoke-PasswordlessGraphRequest -Uri "https://graph.microsoft.com/v1.0/users/$($user.id)/authentication/methods" $hasPasswordless = $false foreach ($method in $methods) { switch ($method.'@odata.type') { '#microsoft.graph.fido2AuthenticationMethod' { $breakdown['FIDO2']++ $hasPasswordless = $true break } '#microsoft.graph.windowsHelloForBusinessAuthenticationMethod' { $breakdown['WindowsHello']++ $hasPasswordless = $true break } '#microsoft.graph.microsoftAuthenticatorAuthenticationMethod' { $breakdown['Authenticator']++ $hasPasswordless = $true break } } } if ($hasPasswordless) { $registered++ } else { $missing += $user.userPrincipalName } } catch { $missing += $user.userPrincipalName } } $percentage = if ($sample.Count -gt 0) { [math]::Round(($registered / $sample.Count) * 100, 1) } else { 0 } return [PSCustomObject]@{ TotalUsers = $users.Count SampledUsers = $sample.Count RegisteredUsers = $registered Percentage = $percentage MethodBreakdown = $breakdown MissingUsers = $missing } } function Write-PasswordlessReport { param( [Parameter(Mandatory = $true)]$Payload, [Parameter(Mandatory = $true)][string]$Path ) $directory = Split-Path -Parent $Path if ($directory -and -not (Test-Path -Path $directory)) { New-Item -ItemType Directory -Path $directory -Force | Out-Null } $Payload | ConvertTo-Json -Depth 6 | Out-File -FilePath $Path -Encoding UTF8 -Force Write-Host "[OK] Rapport opgeslagen op $Path" -ForegroundColor Green } function Invoke-PasswordlessMonitoring { param([switch]$DebugMode) $methods = Get-PasswordlessMethods -DebugMode:$DebugMode $conditionalAccess = Get-PasswordlessConditionalAccess -DebugMode:$DebugMode $userSample = Get-PasswordlessUserSample -DebugMode:$DebugMode $issues = [System.Collections.Generic.List[string]]::new() if (-not ($methods | Where-Object { $_.Enabled })) { $issues.Add('Geen passwordless authenticatiemethoden zijn ingeschakeld.') } if (-not $conditionalAccess -or -not ($conditionalAccess | Where-Object { $_.State -eq 'enabled' })) { $issues.Add('Er is geen ingeschakelde Conditional Access policy die passwordless authenticatie afdwingt.') } if ($userSample.Percentage -lt 80) { $issues.Add("Passwordless adoptie is lager dan 80% (huidig: $($userSample.Percentage)% ).") } if ($userSample.MissingUsers.Count -gt 0) { $issues.Add("Er zijn $($userSample.MissingUsers.Count) gecontroleerde gebruikers zonder geregistreerde passwordless methode.") } $assessment = [PSCustomObject]@{ Script = 'passwordless-authentication.ps1' Timestamp = Get-Date DebugMode = [bool]$DebugMode Methods = $methods ConditionalAccess = $conditionalAccess UserSample = $userSample Issues = $issues IsHealthy = ($issues.Count -eq 0) } if ($assessment.IsHealthy) { Write-Host "[OK] Passwordless authenticatie is volledig ingericht." -ForegroundColor Green } else { Write-Host "[WARN] Passwordless authenticatie vereist aandacht." -ForegroundColor Yellow $issues | ForEach-Object { Write-Host " - $_" -ForegroundColor Yellow } } return $assessment } function Invoke-PasswordlessRemediation { Write-Host "\n[Remediatieplan]" -ForegroundColor Cyan Write-Host "1. Bevestig governance: wijs een eigenaar aan voor passwordless beleid binnen het identity-governanceboard." -ForegroundColor Gray Write-Host "2. Activeer methoden: controleer Authentication Methods policies en zorg dat FIDO2, Windows Hello en Microsoft Authenticator ingeschakeld zijn met attestation- en number-matching-eisen." -ForegroundColor Gray Write-Host "3. Conditional Access: implementeer authentication strengths die passwordless vereisen voor alle gebruikers en hoog-risico-apps." -ForegroundColor Gray Write-Host "4. Adoptiecampagne: start een registratieactie met duidelijke communicatie, selfservice-handleidingen en ondersteuning voor uitzonderingen." -ForegroundColor Gray Write-Host "5. Bewijsvoering: run dit script periodiek, archiveer rapporten en koppel de resultaten aan BIO/AVG-controles." -ForegroundColor Gray Write-Host "6. Lessons learned: verwerk incidenten en feedback in het beleid en update dit script indien nieuwe controlevragen ontstaan." -ForegroundColor Gray } Write-PasswordlessHeader try { if ($Monitoring) { $result = Invoke-PasswordlessMonitoring -DebugMode:$DebugMode if ($ReportPath) { Write-PasswordlessReport -Payload $result -Path $ReportPath } $result } if ($Remediation) { Invoke-PasswordlessRemediation } } catch { Write-Host "[FAIL] $($_.Exception.Message)" -ForegroundColor Red throw } finally { Disconnect-PasswordlessGraph Write-Host "`n========================================`n" -ForegroundColor Cyan }

Risico zonder implementatie

Risico zonder implementatie
Hoog: Wie wacht met passwordless authenticatie accepteert dat phishing en credential stuffing blijvend succes hebben en dat audits structureel dezelfde tekortkoming aanwijzen.

Management Samenvatting

Voer passwordless authenticatie tenantbreed in met FIDO2, Windows Hello en Microsoft Authenticator, koppel de configuratie aan Conditional Access en borg monitoring via het script zodat bewijsvoering richting BIO, AVG en NIS2 altijd paraat is.