Workloads/DefenderForEndpoint.ps1

function Connect-MSCloudLoginDefenderForEndpoint
{
    [CmdletBinding()]
    param()

    $ProgressPreference = 'SilentlyContinue'
    $source = 'Connect-MSCloudLoginDefenderForEndpoint'

    if ($Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.AuthenticationType -eq 'ServicePrincipalWithSecret')
    {
        Add-MSCloudLoginAssistantEvent -Message 'Will try connecting with Application Secret' -Source $source
        Connect-MSCloudLoginDefenderForEndpointWithAppSecret
    }
    elseif ($Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.AuthenticationType -eq 'ServicePrincipalWithThumbprint')
    {
        Add-MSCloudLoginAssistantEvent -Message 'Will try connecting with Application Secret' -Source $source
        Connect-MSCloudLoginDefenderForEndpointWithCertificateThumbprint
    }
    elseif ($Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.AuthenticationType -eq 'AccessToken')
    {
        Add-MSCloudLoginAssistantEvent -Message 'Will try connecting with Access Token' -Source $source
        $Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.AccessTokens[0])
        $AccessTokenValue = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($Ptr)
        [System.Runtime.InteropServices.Marshal]::ZeroFreeCoTaskMemUnicode($Ptr)
        $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.AccessToken = $AccessTokenValue
    }
}

function Connect-MSCloudLoginDefenderForEndpointWithAppSecret
{
    [CmdletBinding()]
    param()

    $ProgressPreference = 'SilentlyContinue'
    $source = 'Connect-MSCloudLoginDefenderForEndpointWithAppSecret'

    $managementToken = Get-AuthToken -AuthorizationUrl $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.AuthorizationUrl `
        -ClientId $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.ApplicationId `
        -ClientSecret $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.ApplicationSecret `
        -TenantId $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.TenantId `
        -Scope $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.Scope

    Add-MSCloudLoginAssistantEvent -Message 'Successfully connected to the DefenderForEndpoint API using Application Secret' -Source $source
    $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.AccessToken = $managementToken.token_type.ToString() + ' ' + $managementToken.access_token.ToString()
}

function Connect-MSCloudLoginDefenderForEndpointWithCertificateThumbprint
{
    [CmdletBinding()]
    param()

    $ProgressPreference = 'SilentlyContinue'
    $source = 'Connect-MSCloudLoginDefenderForEndpointWithCertificateThumbprint'

    try
    {
        $request = Get-AuthToken -AuthorizationUrl $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.AuthorizationUrl `
            -CertificateThumbprint $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.CertificateThumbprint `
            -TenantId $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.TenantId `
            -ClientId $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.ApplicationId `
            -Scope $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.Scope

        $Script:MSCloudLoginConnectionProfile.DefenderForEndpoint.AccessToken = 'Bearer ' + $request.access_token
        Add-MSCloudLoginAssistantEvent -Message 'Successfully connected to the DefenderForEndpoint API using Certificate Thumbprint' -Source $source
    }
    catch
    {
        throw $_
    }
}