Private/Get-iPilotDirectorySyncOAuthToken.ps1

Function Get-iPilotDirectorySyncOAuthToken {

    # Application (client) ID, tenant ID and secret
    Get-iPilotDirectorySyncCredentials

    # Construct URI
    $Uri = "https://login.microsoftonline.com/$global:iPilotTenantID/oauth2/v2.0/token"

    # Construct Body
    $Body = @{
        client_id     = $global:iPilotClientID
        scope         = "https://graph.microsoft.com/.default"
        client_secret = $global:iPilotClientSecret
        grant_type    = "client_credentials"
    }

    # Get OAuth 2.0 Token
    Try {
        $TokenRequest = Invoke-WebRequest -Method Post -Uri $Uri -ContentType "application/x-www-form-urlencoded" -Body $Body -UseBasicParsing
    } Catch {
        Write-Error "Failed to retreive OAuth Token from $Uri. Error: $($_.Exception.Message)"
        break
    }

    # Access Token
    $global:iPilotDirectorySyncOAuthToken = ($TokenRequest.Content | ConvertFrom-Json).access_token
}