· 6 years ago · Dec 12, 2019, 08:06 PM
1CLS
2$apiMethod = "GET"
3$apiURL = "https://protect-us.mimecast.com/s/Ov9CCVO97nux01NOIEYSa8?domain=api.absolute.com"
4$apiService = "/v2/reporting/devices"
5$apiHost = "api.absolute.com"
6$apiQuery = "%24top=1"
7$apiPayload = ""
8$apiToken = ""
9$apiSecret = ""
10$xDate = Get-Date -Format FileDateUniversal
11$xDate = $xDate -replace "Z", ""
12$xDateTime = [DateTime]::UtcNow | get-date -Format "yyyyMMddTHHmmssZ"
13
14Function Convert-ByteArrayToHex
15{
16 [cmdletbinding()]
17 param
18 (
19 [parameter(Mandatory=$true)]
20 [Byte[]]
21 $Bytes
22 )
23 $HexString = [System.Text.StringBuilder]::new($Bytes.Length * 2)
24 ForEach($byte in $Bytes)
25 {
26 $HexString.AppendFormat("{0:x2}", $byte) | Out-Null
27 }
28 $HexString.ToString()
29}
30
31Function Convert-HexToByteArray
32{
33 [cmdletbinding()]
34 param
35 (
36 [parameter(Mandatory=$true)]
37 [String]
38 $HexString
39 )
40 $Bytes = [byte[]]::new($HexString.Length / 2)
41 For($i=0; $i -lt $HexString.Length; $i+=2)
42 {
43 $Bytes[$i/2] = [convert]::ToByte($HexString.Substring($i, 2), 16)
44 }
45 $Bytes
46}
47
48
49Function hash($request)
50{
51 $hasher = [System.Security.Cryptography.SHA256]::Create()
52 $content = [Text.Encoding]::UTF8.GetBytes($request)
53 $hash = $hasher.ComputeHash($content)
54 return $hash
55}
56
57
58Function HmacSHA256($request, $secret)
59{
60 $hmacsha = New-Object System.Security.Cryptography.HMACSHA256
61 $hmacsha.key= $secret
62 $content = [Text.Encoding]::UTF8.GetBytes($request)
63 $HmacSHA256 = $hmacsha.ComputeHash($content)
64 return $HmacSHA256
65}
66
67
68#### CREATE CANONICAL REQUEST ####
69$canHeader1 = "host:$apiHost"
70$canHeader2 = "content-type:application/json"
71$canHeader3 = "x-abs-date:$xDateTime"
72$apiPayloadHash = Convert-ByteArrayToHex -Bytes (hash($apiPayload))
73$CanonicalRequestString = $apiMethod+"`n"+$apiService+"`n"+$apiQuery+"`n"+$canHeader1+"`n"+$canHeader2+"`n"+$canHeader3+"`n"+$apiPayloadHash
74$CanonicalRequestHash = Convert-ByteArrayToHex -Bytes (hash($CanonicalRequestString))
75
76
77#### CREATE STRING TO SIGN ####
78$strAlgorithim = "ABS1-HMAC-SHA-256"
79$strRequestDateTime = $xdateTime
80$strCredentialScope = "$xdate/cadc/abs1"
81$StringToSign = $strAlgorithim+"`n"+$strRequestDateTime+"`n"+$strCredentialScope+"`n"+$CanonicalRequestHash
82
83
84#### CREATE SIGNING KEY ####
85$enc = [system.Text.Encoding]::UTF8
86$xSecret = "ABS1$apiSecret"
87$kSecret = $enc.GetBytes($xSecret)
88$kDate= HmacSHA256 -request $xDate -secret $kSecret
89$kSigning = HmacSHA256 -request "abs1_request" -secret $kDate
90$kSignature = HmacSHA256 -request $StringToSign -secret $kSigning
91$signature = Convert-ByteArrayToHex -Bytes $kSignature
92
93
94#### CREATE API REQUEST ####
95$apiURLaction = "$apiURL$apiService"+"?"+"$apiQuery"
96$authString = "ABS1-HMAC-SHA-256 Credential=$apiToken/$xDate/cadc/abs1, SignedHeaders=host;content-type;x-abs-date, Signature=$signature"
97
98$headers = @{}
99$headers["host"] = "api.absolute.com"
100$headers["content-type"] = "application/json"
101$headers["x-abs-date"] = $xDateTime
102$headers["authorization"] = $authString
103
104
105#### OUTPUT REQUEST ####
106Write-Host "Canonical Request:"
107Write-Host $CanonicalRequestString
108Write-Host
109Write-Host "String to Sign:"
110Write-Host $StringToSign
111Write-Host
112Write-Host "Authorization Header:"
113Write-Host $authString
114Write-Host
115Write-Host "API URL:"
116Write-Host $apiURLaction
117Write-Host
118
119
120#### CALL API ####
121$result = Invoke-WebRequest -Uri $APIURLaction -Method $apiMethod -Headers $headers
122
123
124#### OUTPUT API RESULTS ####
125Write-Host "API Output:"
126Write-Host "$result"