Wenn Sie die API einfach bedienen möchten, verwenden Sie häufig cURL, Postman, HTTP-Client, der von verschiedenen Programmiersprachen usw. bereitgestellt wird. Aufgrund verschiedener Einschränkungen ist es jedoch möglicherweise nicht möglich, eine solche Umgebung vorzubereiten. Es ist nicht?
In diesem Beitrag werde ich die API der Cisco Identity Services Engine (im Folgenden als ISE bezeichnet) vorstellen, mit der Sie die REST-API zumindest mit einem Windows-Terminal (PowerShell) betreiben können.
Beide verwenden den Befehl "Invoke-WebRequest", der standardmäßig in PowerShell verfügbar ist. Als Referenz wird auch ein Beispiel für die Implementierung derselben Operation in Python gezeigt.
・ Windows 10 Pro -PowerShell Version 5.1 (Standardeinstellungen nach der Windows-Installation) · Cisco ISE Version 2.6
Siehe Qiita-Artikel (https://qiita.com/naixia/items/5c521183c2b606a891b1) oder DevNet-Artikel (https://developer.cisco.com/docs/identity-services-engine/).
#Verarbeitung zur Vermeidung von SSL-Fehlern
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
#Variablendefinition
$username = 'ersadmin' # ERS Admin Username
$password = 'XXXX' # ERS Admin Password
$url = 'https://X.X.X.X:9060/ers/config/internaluser/' # X.X.X.X => ISE's IP address
$credPair = "$($username):$($password)"
$encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($credPair))
hu
$headers = @{
'Authorization'= "Basic $encodedCredentials";
'Accept'= 'application/json';
'cache-control'= 'no-cache'
}
#API-Aufruf
$responseData = Invoke-WebRequest -Uri $url -Method Get -Headers $headers -UseBasicParsing
#Beispiel für eine Bestätigungsmethode
return $responseData
return $responseData.StatusCode
return $responseData.Header
return $responseData.RawContent
return $responseData.Content
Standardmäßig bietet PowerShell zusätzlich zu "Invoke-WebRequest" einen Befehl namens "Invoke-RestMethod" als HTTP-Client. Um den Antwortheader und den Inhalt in einer Form anzuzeigen, die für die Benutzer so leicht zu sehen ist, ist es besser, "-UserBasicParsing" zu "Invoke-WebRequest" hinzuzufügen. Wenn Sie den Rückgabewert direkt verarbeiten und etwas tun möchten, rufen Sie "Invoke" auf -RestMethod` scheint nützlich zu sein. Was ist der Unterschied zwischen hier und [hier](https://www.it-swarm.dev/ja/windows/invokewebrequest und invokerestmethod? / 944432281 /) ist ebenfalls hilfreich.
Verwenden Sie die Anforderungsbibliothek für API-Aufrufe in Python3.7 (Mac) (dies ist einfacher).
import requests
import json
import base64
host = "X.X.X.X" # ISE's IP address
user = "ersadmin" # ERS Admin Username
password = "XXXXXX" # ERS Admin Password
creds = str.encode(':'.join((user, password)))
encodedAuth = bytes.decode(base64.b64encode(creds))
headers = {
'accept': "application/json",
'authorization': " ".join(("Basic",encodedAuth)),
'cache-control': "no-cache",
}
url = "https://{}:9060".format(host) + "/ers/config/internaluser/"
r = requests.get(url, headers=headers,verify=False) #Diesmal verwendet ISE ein selbstsigniertes Zertifikat. Aktivieren Sie daher die Option zur Vermeidung von SSL-Fehlern
data = r.json()
print(json.dumps(data, indent=4))
#Verarbeitung zur Vermeidung von SSL-Fehlern
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
#Variablendefinition
$username = 'ersadmin' # ERS Admin Username
$password = 'XXXX' # ERS Admin Password
$url = 'https://X.X.X.X:9060/ers/config/internaluser/' + "57d1fada-3ab6-4d62-94eb-9b77be36dc7e" # X.X.X.X => ISE's IP address +Die ID des Zielbenutzers wird zur URL
$credPair = "$($username):$($password)"
$encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($credPair))
#Inhalt in der Kopfzeile-Typ hinzufügen
$headers = @{
'Authorization'= "Basic $encodedCredentials";
'Accept'= 'application/json';
'cache-control'= 'no-cache';
'content-type'= 'application/json'
}
#Körperdefinition. Der Parameter ist die ID des Kontos, das Sie ändern möchten, name,minimal erforderliches Passwort
$body = @{
"InternalUser" = @{
"id" = "57d1fada-3ab6-4d62-94eb-9b77be36dc7e";
"name" = "user1";
"password"="Password123"
}
} | convertTo-Json
#API-Anfrage
$responseData = Invoke-WebRequest -Uri $url -Method PUT -Headers $headers -Body $body -UseBasicParsing
#Bestätigungsmethode
return $responseData.RawContent
return $responseData
return $responseData.StatusCode
return $responseData.Header
return $responseData.Content
import requests
import json
import base64
host = "X.X.X.X" # ISE's IP address
user = "ersadmin" # ERS Admin Username
password = "XXXXXX" # ERS Admin Password
user_id = "57d1fada-3ab6-4d62-94eb-9b77be36dc7e" #ID des zu aktualisierenden Benutzers
creds = str.encode(':'.join((user, password)))
encodedAuth = bytes.decode(base64.b64encode(creds))
headers = {
'accept': "application/json",
'content-type': "application/json",
'authorization': " ".join(("Basic",encodedAuth)),
'cache-control': "no-cache",
}
req_body_json = """ {{
"InternalUser" : {{
"id" : "{}",
"name" : "user1",
"password" : "Password123",
"customAttributes" : {{
}}
}}
}}
""".format(user_id,user_name,new_passwd)
url = "https://{}:9060".format(host) + "/ers/config/internaluser/{}".format(id)
r = requests.put(url, headers=headers, data=req_body_json, verify=False)
data = r.json()
print(json.dumps(data, indent=4))
So führen Sie die Standardauthentifizierung in PowerShell durch https://pallabpain.wordpress.com/2016/09/14/rest-api-call-with-basic-authentication-in-powershell/
DevNet Cisco ISE ERS API Reference Guide https://developer.cisco.com/docs/identity-services-engine/
ERS API (External RESTful Services API) https://www.cisco.com/c/en/us/td/docs/security/ise/2-6/api_ref_guide/api_ref_book/ise_api_ref_ers1.html
Python-Anfänger haben ein Skript mit der ISE ERS-API geschrieben https://qiita.com/naixia/items/5c521183c2b606a891b1
Was ist der Unterschied zwischen Invoke-WebRequest und Invoke-RestMethod? https://www.it-swarm.dev/ja/windows/invokewebrequestとinvokerestmethodの違いは何ですか?/944432281/
Recommended Posts