Private/ConvertFrom-NSPFortinetToken.ps1

function ConvertFrom-NSPFortinetToken {
    # When a portal JWT expires (its 'exp' claim), as local time.
    [CmdletBinding()]
    [OutputType([datetime])]
    param([Parameter(Mandatory)][string]$Token)

    $parts = ($Token -replace '^Bearer\s+').Split('.')
    if ($parts.Count -lt 2) { throw 'That is not a Fortinet support portal token.' }
    $payload = $parts[1].Replace('-', '+').Replace('_', '/')
    $payload += '=' * ((4 - $payload.Length % 4) % 4)
    $claims = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($payload)) | ConvertFrom-Json
    if (-not $claims.exp) { throw 'The portal token has no expiry.' }
    [DateTimeOffset]::FromUnixTimeSeconds([long]$claims.exp).LocalDateTime
}