Back to articles
March 29, 2025
powershell, script, api automation, base64

Powershell API Call with base64 encoded auth

# Ignore Certificate Issues
>add-type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
        public bool CheckValidationResult(
            ServicePoint srvPoint, X509Certificate certificate,
            WebRequest request, int certificateProblem) {
            return true;
        }
    }
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy

function getSession($url) {
    $creds = 'YWRtaW46YWRtaW4xMjM='
    
    $requestString = 'session'

    $fullUrl = $url + $requestString
    $headers= @{
        'NSM-SDK-API' = $creds
        'Accept' = 'application/vnd.nsm.v1.0+json'
        'Content-Type' = 'application/json'
        }

    # Get Session token Output to file version
    #Invoke-RestMethod -Method 'Get' -Uri $fullUrl -Headers $headers -OutFile output.csv

    # Get Session Token
    $sessionToken = Invoke-RestMethod -Method 'Get' -Uri $fullUrl -Headers $headers
    Write-Host Your session token is: $sessionToken.session
    
    return $sessionToken

}

function apiCall($apiToken, $method, $url, $requestUri) { 
    
    $callUrl = $url + $requestUri
    $headers= @{
        'NSM-SDK-API' = $apiToken
        'Accept' = 'application/vnd.nsm.v1.0+json'
        'Content-Type' = 'application/json'
        }
   
    if ($method -eq 'GET') {
        $apiCallOutput = Invoke-RestMethod -Method 'GET' -Uri $callUrl -Headers $headers -Verbose
    } elseif ($method -eq 'POST') {
         $apiCallOutput = Invoke-RestMethod -Method 'POST' -Uri $callUrl -Headers $headers -Verbose
    } else {
        Write-Host "Method --->> " +($method) "is not yet defined in the api script"
        $apiCallOutput = 'none'
    }
    return $apiCallOutput
    }



$serverIP = '10.10.17.148'
$url = 'https://'+($serverIP)+'/sdkapi/'

# Get Session Token
$sessionToken = getSession $url
$token = $sessionToken.session+':'+$sessionToken.userId
# Convert token to base64
$Bytes = [System.Text.Encoding]::UTF8.GetBytes($token)
#$enc = [System.Text.Encoding]::ASCII
#$enc.GetString($Bytes)
$apiToken =[System.Convert]::ToBase64String($Bytes)
$apiToken.TrimEnd()

# Get Heartbeat to test 
$requestUri = 'heartbeat'
$method = 'GET'
$heartbeat = apiCall $apiToken $method $url $requestUri

# Global Auto Ack
$requestUri = 'globalautoack'
$method = 'GET'
$globalautoackInfo = apiCall $apiToken $method $url $requestUri

# Domain Info
$requestUri = 'domain'
$method = 'GET'
$domainInfo = apiCall $apiToken $method $url $requestUri


# If only one domain
$domainInfo.DomainDescriptor.id
Loading comments...