2

I tried using this C# code below, but getting status code 401 (reason:unautherized):

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: Using Basic Authorization header.. getting same error (401- unautherized). I tried from python script, it works. Used Basic Authorization header in it.

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;
        }
    }
}
Mahesh
  • 309
  • 4
  • 8

1 Answers1

1

I figured out. The url "api/v2/tokens" is missing "/" at the end.

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

Mahesh
  • 309
  • 4
  • 8