VCenter ReST API authentication

拜拜、爱过 提交于 2019-12-01 20:34:45

问题


I am following vmware documentation at https://code.vmware.com/apis/62/vcenter-management#/ What headers are to be provided to authenticate to VCenter Server while using ReST API?


回答1:


Let me illustrate what you would exactly need to do in order to obtain a list of VMs from Vcenter for example.

First, you need to issue a POST request to https://vcsa/rest/com/vmware/cis/session in order to get a session id.

You then use a GET request to https://vcsa/rest/vcenter/vm with the HTTP header vmware-api-session-id set to the previously obtained session id.

Here is some example code in 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);



回答2:


For 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:


for .NET Client

//only if you dont have valid certificate ignore certificate

var handler = new HttpClientHandler();
        handler.ClientCertificateOptions = ClientCertificateOption.Manual;
        handler.ServerCertificateCustomValidationCallback =
            (httpRequestMessage, cert, cetChain, policyErrors) =>
            {
                return true;
            };


        using (var client = new HttpClient(handler))
        {
            var values = new Dictionary<string, string>
            {

            };

            client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
    "Basic", Convert.ToBase64String(
        System.Text.ASCIIEncoding.ASCII.GetBytes(
           $"{"username"}:{"password"}")));
            var content = new FormUrlEncodedContent(values);
            //var stringContent = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded");

            var response = await client.PostAsync("https://vcsa/rest/com/vmware/cis/session", content);

            var responseString = await response.Content.ReadAsAsync<KeyValuePair<string, string>>();
            client.DefaultRequestHeaders.Authorization
                     = new AuthenticationHeaderValue("Bearer", responseString.Value);
            var vmRespone = await client.GetAsync("https://vcsa/rest/vcenter/vm");

        }


来源:https://stackoverflow.com/questions/45026210/vcenter-rest-api-authentication

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!