private/helper/m365/api/Get-Office365ManagementApiToken.ps1

function Get-Office365ManagementApiToken
{
    <#
    .SYNOPSIS
        Get access token to Office 365 Management Api.
    .DESCRIPTION
        Using undocumented API to get access token to Office 365 Management API.
        Requires the module "Az.Accounts".
    .NOTES
        Requires the following modules:
        - Az.Accounts
    .EXAMPLE
        Get-Office365ManagementApiToken;
    #>

    [cmdletbinding()]
    param
    (
    )
    BEGIN
    {
        # Variable to store access token.
        [string]$accessToken = '';
    }
    PROCESS
    {
        # Get the current Azure context.
        $azContext = Get-AzContext;

        # If the context is null.
        if ($null -eq $azContext)
        {
            # Throw exception.
            throw ('Could not get Azure context, a connection need to be established using the "Connect-AzAccount" cmdlet');
        }

        # Write to log.
        Write-CustomLog -Category 'API' -Subcategory 'Office 365 Management' -Message ('Getting access token') -Level Verbose;

        # Construct (JTW) access token.
        $jwtToken = [Microsoft.Azure.Commands.Common.Authentication.AzureSession]::Instance.AuthenticationFactory.Authenticate(
            $azContext.Account,
            $azContext.Environment,
            $azContext.Tenant.Id.ToString(),
            $null,
            [Microsoft.Azure.Commands.Common.Authentication.ShowDialog]::Auto,
            $null,
            'https://admin.microsoft.com'
        );

        # If the access token is null.
        if ($null -eq $jwtToken.AccessToken)
        {
            # Throw exception.
            throw ('Something went wrong getting access token');
        }

        # Save the token.
        $accessToken = $jwtToken.AccessToken;
    }
    END
    {
        # Return the token.
        return $accessToken;
    }
}