【问题标题】:Getting Ansible Tower API authentication token from C#从 C# 获取 Ansible Tower API 身份验证令牌
【发布时间】:2021-12-02 07:57:12
【问题描述】:

我尝试使用下面的 C# 代码,但得到状态码 401(原因:未授权):

var baseUri = "https://ansibletower1.test1.com";

var data = @"{'username':'test123', 'password':'a1b2c3Z0!-99', 'description':'Ansible Api token', 'scope':'write'}";

using (var httpClient = new HttpClient())
{
    httpClient.BaseAddress = new Uri(baseUri);
    var content = new StringContent(data, Encoding.UTF8, "application/json");

    var response = httpClient.PostAsync("api/v2/tokens", content).Result;

    if (response.StatusCode == HttpStatusCode.OK)
    {
        var result = response.Content.ReadAsStringAsync().Result;                   
        if (result != null)
        {
            return result;
        }
    }
}

Try-2:使用基本授权标头.. 得到相同的错误(401-未经授权)。 我从 python 脚本中尝试过,它可以工作。在其中使用了基本授权标头。

var baseUri = "https://ansibletower1.test1.com";
var jsonObject = new {description = "Tower API token", scope = "write" };
var username="test123";
var password="a1b2c3Z0!-99";

using (var httpClient = new HttpClient())
{
    httpClient.BaseAddress = new Uri(baseUri);
    httpClient.DefaultRequestHeaders.Accept.Clear();
    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
                "Basic", Convert.ToBase64String(ASCIIEncoding.ASCII.GetBytes($"{username}:{password}")));

    var content = new StringContent(JsonConvert.SerializeObject(jsonObject), Encoding.UTF8, "application/json");
    var response = httpClient.PostAsync("api/v2/tokens", content).Result;

    if (response.StatusCode == HttpStatusCode.OK)
    {
        var result = response.Content.ReadAsStringAsync().Result;                   
        if (result != null)
        {
            return result;
        }
    }
}

【问题讨论】:

    标签: ansible ansible-tower ansible-api


    【解决方案1】:

    我想通了。 url“api/v2/tokens”末尾缺少“/”。

    应该是: var response = httpClient.PostAsync("api/v2/tokens/", content).Result;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      相关资源
      最近更新 更多