Si vous souhaitez utiliser l'API facilement, vous utiliserez souvent cURL, Postman, HTTP Client fourni par divers langages de programmation, etc., mais il peut ne pas être possible de préparer un tel environnement en raison de diverses restrictions. N'est-ce pas?
Dans cet article, je présenterai l'API de Cisco Identity Services Engine (ci-après dénommée ISE) que vous pouvez utiliser l'API REST au moins avec un terminal Windows (PowerShell).
Les deux utilisent la commande ʻInvoke-WebRequest`, qui est disponible par défaut dans PowerShell. Pour référence, un exemple d'implémentation de la même opération en Python est également présenté.
・ Windows 10 Professionnel -PowerShell version 5.1 (paramètres par défaut après l'installation de Windows) · Cisco ISE version 2.6
Voir les articles Qiita (https://qiita.com/naixia/items/5c521183c2b606a891b1) ou les articles DevNet (https://developer.cisco.com/docs/identity-services-engine/).
#Traitement pour éviter les erreurs SSL
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
#Définition variable
$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'
}
#Appel API
$responseData = Invoke-WebRequest -Uri $url -Method Get -Headers $headers -UseBasicParsing
#Exemple de méthode de confirmation
return $responseData
return $responseData.StatusCode
return $responseData.Header
return $responseData.RawContent
return $responseData.Content
Par défaut, PowerShell fournit la commande ʻInvoke-RestMethod en plus de ʻInvoke-WebRequest
en tant que client HTTP.
Pour afficher l'en-tête et le contenu de la réponse sous une forme facile à voir comme cette fois-ci, il est préférable d'ajouter -UserBasicParsing
à ʻInvoke-WebRequest, et si vous voulez gérer la valeur de retour directement et faire quelque chose, ʻInvoke -RestMethod
semble être utile.
Quelle est la différence entre ici et [ici](https://www.it-swarm.dev/ja/windows/invokewebrequest et invokerestmethod? / 944432281 /) est également utile.
Utiliser la bibliothèque de requêtes pour les appels d'API en python3.7 (mac) (c'est plus simple)
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) #Cette fois, ISE utilise un certificat auto-signé, activez ainsi l'option d'évitement d'erreur SSL
data = r.json()
print(json.dumps(data, indent=4))
#Traitement pour éviter les erreurs SSL
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
#Définition variable
$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 +L'ID de l'utilisateur cible devient l'URL
$credPair = "$($username):$($password)"
$encodedCredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes($credPair))
#Contenu dans l'en-tête-Ajouter un type
$headers = @{
'Authorization'= "Basic $encodedCredentials";
'Accept'= 'application/json';
'cache-control'= 'no-cache';
'content-type'= 'application/json'
}
#Définition du corps. Le paramètre est l'identifiant du compte que vous souhaitez modifier, name,mot de passe minimum requis
$body = @{
"InternalUser" = @{
"id" = "57d1fada-3ab6-4d62-94eb-9b77be36dc7e";
"name" = "user1";
"password"="Password123"
}
} | convertTo-Json
#Demande d'API
$responseData = Invoke-WebRequest -Uri $url -Method PUT -Headers $headers -Body $body -UseBasicParsing
#Méthode de confirmation
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 de l'utilisateur à mettre à jour
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))
Comment faire l'authentification de base dans PowerShell 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
Un débutant en Python a écrit un script à l'aide de l'API ISE ERS https://qiita.com/naixia/items/5c521183c2b606a891b1
Quelle est la différence entre Invoke-WebRequest et Invoke-RestMethod? https://www.it-swarm.dev/ja/windows/invokewebrequestとinvokerestmethodの違いは何ですか?/944432281/
Recommended Posts