VCenter ReST API身份验证

时间:2017-07-11 05:40:50

标签: vmware vcenter

我正在关注*= require font-awesome.min 上的vmware文档在使用ReST API时,要向VCenter Server提供哪些标头进行身份验证?

4 个答案:

答案 0 :(得分:3)

让我举例说明为了从Vcenter获取VM列表,您需要做些什么。

首先,您需要向https://vcsa/rest/com/vmware/cis/session发出POST请求才能获得会话ID。

然后使用对https://vcsa/rest/vcenter/vm的GET请求,并将HTTP标头vmware-api-session-id设置为先前获取的会话ID。

以下是PHP中的一些示例代码:

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_URL, "https://vcsa/rest/com/vmware/cis/session");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, 'user@vsphere.local' . ":" . 'password');

$out = json_decode(curl_exec($ch));
// var_dump($out);
if ($out === false) {
  echo 'Curl Error: ' . curl_error($ch);
  exit;
}
$sid = $out->value;

curl_setopt($ch, CURLOPT_HTTPHEADER, array("vmware-api-session-id:$sid"));
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_URL, "https://vcsa/rest/vcenter/vm");

$output = curl_exec($ch);
$vms = json_decode($output);
var_dump($vms);

curl_close($ch);

答案 1 :(得分:1)

PowerShell:

$User="<username>"
$Pass="<password>"
$Auth=$User+":"+$Pass
$Encoded=[System.Text.Encoding]::UTF8.GetBytes($Auth)
$EncodedAuth=[System.Convert]::ToBase64String($Encoded)
$Headers = @{"Authorization"="Basic $($EncodedAuth)"}
$SecPass=ConvertTo-SecureString -String $Pass -AsPlainText -Force
$Cred=[System.Management.Automation.PSCredential]::new($User,$SecPass)

<# Uncomment this part if you don't have a valid trusted certificate
$strIDontCarePolicy=@"
using System.Net;
using System.Security.Cryptography.X509Certificates;

public class IDontCarePolicy : ICertificatePolicy {
  public IDontCarePolicy() {}
  public bool CheckValidationResult(ServicePoint sPoint, X509Certificate cert, WebRequest wRequest, int certProb) { return true; }
}
"@
Add-Type -TypeDefinition $strIDontCarePolicy -PassThru
[System.Net.ServicePointManager]::CertificatePolicy = New-Object IDontCarePolicy 
#>

$initSession=Invoke-RestMethod -Uri "https://<vCenter Server>/rest/com/vmware/cis/session" -Method Post -Headers $Headers
$SessionID=$initSession.Value

答案 2 :(得分:0)

对于python:

import requests

# https://vdc-download.vmware.com/vmwb-repository/dcr-public/1cd28284-3b72-4885-9e31-d1c6d9e26686/71ef7304-a6c9-43b3-a3cd-868b2c236c81/doc/operations/com/vmware/vcenter/vm.list-operation.html

sess = requests.post("https://XXXXXXXX/rest/com/vmware/cis/session", auth=('USERNAME', 'PASSWORD'), verify=False)
session_id = sess.json()['value']

resp = requests.get("https://XXXXXXXX/rest/vcenter/vm", verify=False, headers={
    "vmware-api-session-id": session_id
})
print(u"resp.text = %s" % str(resp.text))

答案 3 :(得分:0)

.NET客户端

///仅当您没有有效的证书时才忽略证书

curl -H Host:whoami.docker.localhost http://127.0.0.1