PowerShell fout code 50173

PowerShell fout code 50173
PowerShell fout code 50173

Wanneer je met Azure-resources en Microsoft Graph API werkt, is een betrouwbare authenticatie cruciaal. Vaak loop je tegen problemen aan zoals verlopen tokens, MFA-verplichtingen of het gebruik van Service Principals in CI/CD. Daarom heb ik een slimme PowerShell-functie ontwikkeld die automatisch kiest tussen interactieve login (met MFA fallback) en non-interactieve login (Service Principal). Het gaat dan bijvoorbeeld om PowerShell fout code 50173.

Sign-in error code 50173 
Failure reason
The provided grant has expired due to it being revoked, a fresh auth token is needed. The user might have changed or reset their password. The grant was issued on '{authTime}' and the TokensValidFrom date (before which tokens are not valid) for this user is '{validDate}'.

De PowerShell foutcode 50173 in Microsoft Entra ID (voorheen Azure AD) geeft aan dat het script een verlopen of ingetrokken refresh-token gebruikt. Dit gebeurt meestal wanneer:

  • De gebruiker zijn wachtwoord heeft gewijzigd of opnieuw ingesteld.
  • De TokensValidFrom-datum is bijgewerkt (bijvoorbeeld door een wachtwoordreset of een actie van een beheerder).
  • De applicatie probeert een oud refresh-token te gebruiken dat niet meer geldig is.

De PowerShell fout code 50713 komt voor door vanuit een PowerShell script Connect-AzAccount te gebruiken of Connect-MgGraph. De foutmelding 50173 komt niet direct uit PowerShell-code, maar uit de authenticatieflow die het script door Connect-AzAccount of Connect-MgGraph uitvoert. Dit betekent dat het probleem zit in de tokenvalidatie bij Azure AD / Microsoft Graph.

Waarom komt PowerShell fout code 50173 voor via het PowerShell script

Het script probeert waarschijnlijk een bestaande sessie te hergebruiken, maar die is niet meer geldig. Je script gebruikt az login en daarna Connect-AzAccount en Connect-MgGraph.

Als Azure een oud refresh token gebruikt (bijvoorbeeld omdat een sessie nog actief is), en de gebruiker heeft recent het wachtwoord gewijzigd of een admin heeft een TokensValidFrom datum aangepast, dan worden alle oude tokens ongeldig.

Oplossing om PowerShell fout code 50173 te voorkomen

Voeg -Force toe aan Connect-AzAccount en gebruik DisConnect-MgGraph om een nieuwe token op te halen. Dit zorgt dat er geen oude sessie in geheugen blijft. Een elegante manier om oude sessies te verwijderen voordat we opnieuw aanloggen, kan via de volgende PowerShell snip.

Function Use-AzureConnection {
    param(
        [Parameter(Mandatory = $true)]
        [string]$SubscriptionId,

        [Parameter(Mandatory = $true)]
        [string]$TenantId,

        [string]$AppId,          # Optioneel: Service Principal Client ID
        [string]$AppSecret       # Optioneel: Service Principal Secret
    )

    # Verwijder oude context
    Clear-AzContext -Force

    # Detecteer of Service Principal credentials zijn opgegeven
    if ($AppId -and $AppSecret) {
        try {
            Write-Host "Connecting to Azure using Service Principal..."
            Connect-AzAccount -ServicePrincipal -Tenant $TenantId -ApplicationId $AppId -Credential (New-Object System.Management.Automation.PSCredential($AppId,(ConvertTo-SecureString $AppSecret -AsPlainText -Force))) -Subscription $SubscriptionId -ErrorAction Stop
            Write-Host "Azure connection successful (Service Principal)."
        } catch {
            Write-Host "Service Principal login failed: $($_.Exception.Message)"
            throw
        }
    } else {
        # Interactieve login met MFA fallback
        try {
            Write-Host "Connecting to Azure interactively..."
            Connect-AzAccount -Subscription $SubscriptionId -Force -ErrorAction Stop
            Write-Host "Azure connection successful."
        } catch {
            Write-Host "Standard Azure login failed: $($_.Exception.Message)"
            Write-Host "Trying MFA device authentication..."
            try {
                Connect-AzAccount -Subscription $SubscriptionId -UseDeviceAuthentication -ErrorAction Stop
                Write-Host "Azure connection successful with MFA."
            } catch {
                Write-Host "Azure login failed even with MFA: $($_.Exception.Message)"
                throw
            }
        }
    }

    # Controleer of context beschikbaar is
    if (-not (Get-AzContext)) {
        throw "Azure login failed. No context available."
    }

    # Microsoft Graph login met 50173 fallback
    try {
        Write-Host "Connecting to Microsoft Graph..."
        Connect-MgGraph -TenantId $TenantId -Scopes "User.Read","Application.ReadWrite.All","Directory.ReadWrite.All" -NoWelcome -ErrorAction Stop
        Write-Host "Microsoft Graph connection successful."
    } catch {
        if ($_.Exception.Message -like "*50173*") {
            Write-Host "Token expired or revoked (Error 50173). Re-authenticating..."
            Disconnect-MgGraph
            Connect-MgGraph -TenantId $TenantId -Scopes "User.Read","Application.ReadWrite.All","Directory.ReadWrite.All" -NoWelcome
            Write-Host "Re-authentication successful."
        } else {
            Write-Host "Graph login failed: $($_.Exception.Message)"
            throw
        }
    }
}

De functie Use-AzureConnection zorgt voor:

  • Automatische keuze van login-methode
    • Als er Service Principal-gegevens zijn opgegeven, gebruikt de functie deze voor een non-interactieve login (ideaal voor CI/CD).
    • Anders wordt een interactieve login uitgevoerd, inclusief MFA fallback.
  • Force herauthenticatie
    Oude sessies worden verwijderd met Clear-AzContext en -Force wordt gebruikt bij login.
  • MFA fallback
    Als de standaard login faalt (bijvoorbeeld door Conditional Access), schakelt de functie automatisch over naar -UseDeviceAuthentication.
  • Microsoft Graph login met foutafhandeling
    Inclusief herstel bij foutcode 50173 (verlopen of ingetrokken token).

Hoe werkt het?

De functie controleert eerst of er Service Principal-credentials zijn. Zo ja, dan wordt een non-interactieve login uitgevoerd. Zo niet, dan probeert de functie een standaard login en schakelt over naar MFA als dat nodig is. Daarna wordt een verbinding met Microsoft Graph gemaakt, waarbij een eventuele tokenfout automatisch wordt opgelost.

Hoe gebruik je deze functie om PowerShell fout code 50173 te voorkomen?

Interactieve login (met MFA fallback):

Use-AzureConnection -SubscriptionId "xxxx-xxxx" -TenantId "yyyy-yyyy"

Non-interactieve login (CI/CD):

Use-AzureConnection -SubscriptionId "xxxx-xxxx" -TenantId "yyyy-yyyy" -AppId "zzzz-zzzz" -AppSecret "SuperSecretValue"

Waarom is dit handig?

  • Geen gedoe meer met verlopen tokens.
  • Inclusief foutafhandeling voor Microsoft Graph.
  • Werkt zowel voor ontwikkelaars als voor geautomatiseerde pipelines.
  • Ondersteunt MFA en Conditional Access zonder extra handwerk.

Wil je meer weten over Azure Authentication methodes, kijk dan hier verder.

Wil je contact met mij opnemen, dan kan dat via het contact formulier.

0 Shares:
You May Also Like