Public/New-DummyJWT.ps1

function New-DummyJWT {
    [CmdletBinding()]

    Param(
        [Parameter(Mandatory = $false)]
        [System.Collections.Hashtable] $Header = @{
            alg = "RS256"
            typ = "JWT"
        },

        [Parameter(Mandatory = $false)]
        [String] $Aud = "https://graph.microsoft.com",

        [Parameter(Mandatory = $false)]
        [String] $Iss = "https://sts.windows.net/00000000-0000-0000-0000-000000000000/",

        [Parameter(Mandatory = $false)]
        [String] $Sub = "00000000-0000-0000-0000-000000000000",

        [Parameter(Mandatory = $false)]
        [String] $Jti = [Guid]::NewGuid().ToString(),

        [Parameter(Mandatory = $false)]
        [Int] $Nbf = [DateTimeOffset]::UtcNow.ToUnixTimeSeconds(),

        [Parameter(Mandatory = $false)]
        [Int] $Exp = [DateTimeOffset]::UtcNow.AddMinutes(60).ToUnixTimeSeconds(),

        [Parameter(Mandatory = $false)]
        [Int] $Iat = [DateTimeOffset]::UtcNow.ToUnixTimeSeconds(),
        
        [Parameter(Mandatory = $false)]
        [System.Collections.Hashtable] $OtherClaims = @{}
    )

    Process {
        $payload = @{
            aud = $Aud
            iss = $Iss
            sub = $Sub
            jti = $Jti
            nbf = $Nbf
            exp = $Exp
            iat = $Iat
        }

        if($PSCmdlet.MyInvocation.BoundParameters.ContainsKey('OtherClaims') -and $OtherClaims.Count -gt 0) {
            $OtherClaims.GetEnumerator() | ForEach-Object {
                $payload[$_.Key] = $_.Value
            }
        }

        $headerJson = ($Header | ConvertTo-Json -Compress).ToString()
        $payloadJson = ($payload | ConvertTo-Json -Compress).ToString()

        $headerEncoded = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($headerJson)).TrimEnd('=').Replace('+', '-').Replace('/', '_')
        $payloadEncoded = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($payloadJson)).TrimEnd('=').Replace('+', '-').Replace('/', '_')

        Write-Verbose "Generated Dummy JWT with payload: $payloadJson"
        return "$headerEncoded.$payloadEncoded.DUMMYSIGNATURE"
    }
}