Connect-AzureGraphAPI--v3-0.psm1

$FunctionScriptName = "Connect-AzureGraphAPI"
Write-Verbose "Import-Start| [$($FunctionScriptName)]"

function Connect-AzureGraphAPI { 
    <#
        .SYNOPSIS
            Login Azure Graph
        .NOTES
            AUTHOR: Ken Dobrunz // Ken.Dobrunz@Direkt-Gruppe.de | Direkt Gruppe
            WEBSITE: http://kensmagic.site
 
            LASTEDIT: 30.05.2020 - Version: 3.0
    #>
 
    [cmdletbinding()]
    Param(
        [Parameter()]$Config,
        [Parameter()][string]$ClientID,
        [Parameter()][string]$ClientSecret,
        [Parameter()][string]$TenantId,
        [Parameter()]$redirectURI,
        [Parameter()]$Resource,
        [Parameter()]$ResourceLoginVersion = "", #Ignored for Graph
        [Parameter()]$AutomationSecretVariable,
        [Parameter()]$TenantIDVariable
    )
    Process {
        $SelfIdentifier = "AZGraph"
        
        #* Config check
        $ClientID = if ($ClientID) { $ClientID }elseif ($Config.ClientID) { $Config.ClientID }else { Write-Error "[$($SelfIdentifier)] No ClientID provided" }
        $ClientSecret = if ($ClientSecret) { $ClientSecret }elseif ($Config.ClientSecret) { $Config.ClientSecret }else { Write-Error "[$($SelfIdentifier)] No ClientSecret provided" }
        $TenantId = if ($TenantId) { $TenantId }elseif ($Config.TenantId) { $Config.TenantId }else { Write-Error "[$($SelfIdentifier)] No TenantId provided" }

        if ($resource) {
            # Resource API / scope
            Write-Verbose "[$($SelfIdentifier)] Connecting against resource [$($resource)]"
            $Body = @{grant_type = 'client_credentials'; client_id = $ClientID; redirect_uri = $redirectURI; resource = $Resource; client_secret = $ClientSecret }
            $URI = "https://login.microsoftonline.com/$TenantId/oauth2/$ResourceLoginVersion/token"
        }
        else {
            Write-Verbose "[$($SelfIdentifier)] Getting MS Graph oauth2 v2.0 token"
            # AZ Graph API / scope
            $Body = @{grant_type = 'client_credentials'; client_id = $ClientID; client_secret = $ClientSecret; scope = 'https://graph.microsoft.com/.default' }
            $URI = "https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token"
        }

        # Getting oAuth token & creating auth header
        $oauthresponse = Invoke-RestMethod -Method Post -Uri $URI -Body $Body   

        return @{'Authorization' = "Bearer " + $oauthresponse.access_token } # "Bearer" optional for graph - necessary for resource
    }
} #v3.0

Export-ModuleMember -Function *
Write-Verbose "Import-END| [$($FunctionScriptName)]"