Public/ConvertFrom-EntraIDAccessToken.ps1

<#
.SYNOPSIS
Converts an Entra ID Access Token (JWT) into its components: Header, Payload, and Signature.

.DESCRIPTION
Converts an Entra ID Access Token (JWT) into its components: Header, Payload,

.EXAMPLE
    PS> Get-EntraIDAccessToken | ConvertFrom-EntraIDAccessToken
#>

function ConvertFrom-EntraIDAccessToken {
    [CmdletBinding()]
    
    Param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [String] $AccessToken,

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

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

        $headerjson = $AccessToken.Split(".")[0]
        $headerjson = $headerjson.PadRight($headerjson.Length + (4 - ($headerjson.Length % 4)), "=").Replace("====", "")
        try {
            $header = ConvertFrom-Json -InputObject ([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($headerjson))) -AsHashtable:$AsHashTable
        }
        catch {
            Write-Error "Failed to decode the JWT header: $_"
            return
        }

        $payload = Get-EntraIDAccessTokenPayload -InputObject $AccessToken -AsHashtable:$AsHashTable
        
        @{
            Header    = $header
            Payload   = $payload
            Signature = $AccessToken.Split(".")[2]
        }
    }
}