Get all organizations in Azure DevOps using REST API

后端 未结 5 1592
谎友^
谎友^ 2020-12-19 03:39

I am trying to retrieve all the organizations in my account but in the documentation an organization is always required in the API call.

https://dev.azure.co         


        
相关标签:
5条回答
  • 2020-12-19 04:12

    We've been using "https://app.vssps.visualstudio.com/_apis/accounts" without specifying any API version and this returns all our accountnames

    This is still working for us, but because of some other issues we have I'm adding the api version to all our api calls, however. For this I also run into the fact that https://docs.microsoft.com/en-us/rest/api/azure/devops/account/accounts/list?view=azure-devops-rest-5.0 requires an member or owner id.

    Retrieving that needs an account/organization so it is a bit of a catch 22 situation.

    For now I'll stay with just "https://app.vssps.visualstudio.com/_apis/accounts" I guess

    0 讨论(0)
  • 2020-12-19 04:12

    you can do it simply by making a call to get all the account you are member/ owner of. However for that you need your id, which can be easily fetched by making get profile call. Here are steps below:

    1. Make a VSTS API call to get profile details using Bearer token or PAT

    https://app.vssps.visualstudio.com/_apis/profile/profiles/me?api-version=5.1

    This will return you, your Id:

    {
        "displayName": "xxxx",
        "publicAlias": "xxx",
        "emailAddress": "xxx",
        "coreRevision": xxx,
        "timeStamp": "2019-06-17T09:29:11.1917804+00:00",
        "id": "{{We need this}}",
        "revision": 298459751
    }
    
    1. Next, make a call to get all the accounts you are member of or owner of:

    https://app.vssps.visualstudio.com/_apis/accounts?api-version=5.1&memberId={{Your Id}}

    Response:

    {
        "count": 1,
        "value": [
            {
                "accountId": "xxx",
                "accountUri": "xxx",
                "accountName": "xxx",
                "properties": {}
            }
        ]
    }
    

    It will return list of accounts you are associated with.

    0 讨论(0)
  • 2020-12-19 04:16

    I'm getting a sign-in response for both "app.vssps.visualstudio.com/_apis/accounts" and Post https://dev.azure.com/{organization1}/_apis/Contribution/HierarchyQuery?api-version=5.0-preview.1

    StatusCode : 203 StatusDescription : Non-Authoritative Information

    EDIT: Nevermind, it worked using the static MSA clientid and replyURL:

    internal const string clientId = "872cd9fa-d31f-45e0-9eab-6e460a02d1f1";          //change to your app registration's Application ID, unless you are an MSA backed account
                internal const string replyUri = "urn:ietf:wg:oauth:2.0:oob";                     //change to your app registration's reply URI, unless you are an MSA backed account
    
     //PromptBehavior.RefreshSession will enforce an authn prompt every time. NOTE: Auto will take your windows login state if possible
                result = ctx.AcquireTokenAsync(azureDevOpsResourceId, clientId, new Uri(replyUri), promptBehavior).Result;
                Console.WriteLine("Token expires on: " + result.ExpiresOn);
    
                var bearerAuthHeader = new AuthenticationHeaderValue("Bearer", result.AccessToken);
    
    // Headers
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Add("User-Agent", "ManagedClientConsoleAppSample");
                client.DefaultRequestHeaders.Add("X-TFS-FedAuthRedirect", "Suppress");
                client.DefaultRequestHeaders.Authorization = authHeader;
    
    
                //Get Organizations
                client.BaseAddress = new Uri("https://app.vssps.visualstudio.com/");
                HttpResponseMessage response1 = client.GetAsync("_apis/accounts").Result;
    
    0 讨论(0)
  • 2020-12-19 04:26

    A REST API request/response pair can be separated into five components:

    The request URI, in the following form:

    VERB https://{instance}[/{team-project}]/_apis[/{area}]/{resource}?api-version={version}
    

    instance: The Azure DevOps Services organization or TFS server you're sending the request to.

    They are structured as follows: Azure DevOps Services: dev.azure.com/{organization}

    The REST API's are organization specific. This is not documented at present. You could submit a feature request here: https://developercommunity.visualstudio.com/spaces/21/index.html

    Our PM and product team will kindly review your suggestion. Sorry for any inconvenience.

    As a workaround, you could use the API which captured from network traffic just as Matt mentioned.

    0 讨论(0)
  • 2020-12-19 04:31

    If you load the current landing page, it displays all your organizations tied to your account. I assumed it had to get that information some way. I captured the network traffic and I believe you could get to the data you want using a system API call. However, it might change or might become unsupported without notice, so use at your own discretion.

    You can get the information you want using this API:

    Post https://dev.azure.com/{organization1}/_apis/Contribution/HierarchyQuery?api-version=5.0-preview.1
    

    Body:

    {
        "contributionIds": ["ms.vss-features.my-organizations-data-provider"],
        "dataProviderContext":
            {
                "properties":{}
            }
    }
    

    Response:

    {
        "dataProviderSharedData": {},
        "dataProviders": {
            "ms.vss-web.component-data": {},
            "ms.vss-web.shared-data": null,
            "ms.vss-features.my-organizations-data-provider": {
                "organizations": [
                    {
                        "id": "{redacted id}",
                        "name": "{organization1}",
                        "url": "https://{organization1}.visualstudio.com/"
                    },
                    {
                        "id": "{redacted id}",
                        "name": "{organization2}",
                        "url": "https://dev.azure.com/{organization2}/"
                    }
                ],
                "createNewOrgUrl": "https://app.vsaex.visualstudio.com/go/signup?account=true"
            }
        } }
    
    0 讨论(0)
提交回复
热议问题