1
votes

In our app we want to retrieve an accesstoken. With this token we want to perform certain actions with Azure DevOps rest API 5.1.

I've tried the suggested documententation from Microsoft for OAuth2 (https://docs.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/oauth?view=azure-devops) and PAT's. This always gives back a 203 response as an result. Does somebody know a workaround for this issue?

2
Have you got some code for this? Also 203 is "203 Non-Authoritative Information" so kinda a success - maybe?Richard Housham
Hi, welcome to SstackOverflow! Could you update more info about your issue? For 203 response code, which step are you trying and it displayed? Better share more steps details::-)Merlin Liang - MSFT
Could you please have a chance to try my solution to see if it helps?Jack Jia

2 Answers

2
votes

According to my test, we can call Azure DevOps rest API with Azure Ad access token. For more details, please refer to the following steps 1. Register an Azure AD application enter image description here

  1. Configure applications

    a. Create client secret

    b. Configure permissions

    enter image description here

  2. Get token

 # get code
GET  https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=<your app client id>
&response_type=code
&redirect_uri=<>
&response_mode=query
&resource=499b84ac-1321-427f-aa17-267ca6975798
&state=12345

#Get token
Post https://login.microsoftonline.com/{tenant}/oauth2/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&client_id=<>
&code=<>
&redirect_uri=https%3A%2F%2Flocalhost%3A12345
&resource=499b84ac-1321-427f-aa17-267ca6975798
&client_secret=<>
  1. Call Rest API enter image description here
0
votes

For how to get authenticated for calling API, you may refer to: Authenticate

Here is the sample for using OAuth2 with ADAL: https://github.com/microsoft/azure-devops-auth-samples/blob/master/ManagedClientConsoleAppSample/Program.cs

And here is a quick sample by using PAT:

    class Program
    {
        public static string personalaccesstoken = "erxvtg*****6aljqa";
        public static string organization = "jack0503";
        public static string project = "keyvault";

        static void Main(string[] args)
        {
            Console.ReadLine();
            GetProjects();
            Console.ReadLine();
        }


        public static async void GetProjects()
        {
            try
            {
                using (HttpClient client = new HttpClient())
                {
                    client.DefaultRequestHeaders.Accept.Add(
                        new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                        Convert.ToBase64String(
                            System.Text.ASCIIEncoding.ASCII.GetBytes(
                                string.Format("{0}:{1}", "", personalaccesstoken))));

                    using (HttpResponseMessage response = await client.GetAsync(
                                $"https://dev.azure.com/{organization}/_apis/projects"))
                    {
                        response.EnsureSuccessStatusCode();
                        string responseBody = await response.Content.ReadAsStringAsync();
                        Console.WriteLine(responseBody);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }