Public/Get-EntraIDAccessTokenPayload.ps1

<#
.SYNOPSIS
Decodes an input access token and returns the payload as a hash table

.EXAMPLE
Get-EntraIDAccessToken | Get-EntraIDAccessTokenPayload

#>

function Get-EntraIDAccessTokenPayload {
    [CmdletBinding()]

    Param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [String] $InputObject,

        [Parameter(Mandatory = $false)]
        [Switch] $AsHashTable
    )

    Process {
        if($InputObject -notlike "*.*.*") {
            Write-Error "InputObject is not a valid JWT token. Expected format: header.payload.signature"
            return
        }

        $payload = $InputObject.Split(".")[1]
        $payload = $payload.PadRight($payload.Length + (4 - ($payload.Length % 4)), "=").Replace("====", "")
        ConvertFrom-Json -InputObject ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($payload))) -AsHashtable:$AsHashTable
    }
}