Различия в длине токена доступа, генерируемого из PowerShell и C#. Net библиотеки PowerShell соответственно - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в Azure DevOps, я получаю токен доступа Azure DevOps двумя способами

  1. Windows PowerShell
  2. PowerShell в приложении WPF

Двумя вышеуказанными способами я могу получить токен доступа, но есть большая разница в размере токена доступа. Если я буду следовать 1-му методу, я получаю токен полного доступа, и он отлично работает. Но если я использую второй метод, он возвращает токен доступа небольшого размера, в результате чего я получаю ошибку 401, когда использую этот токен доступа.

Я делюсь выходными данными с обеих сторон

1. Использование PowerShell

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlNzWnNCTmhaY0YzUTlTNHRycFFCVEJ5TlJSSSIsImtpZCI6IlNzWnNCTmhaY0YzUTlTNHRycFFCVEJLKSADJFL893W9FU87FG8SF79GSG89D7S89A8F7DA98DSF7FD87ASDFFASASDMFa8dfafa8d98asfJKHKJhkHKJytrULlkjkytu78&*6i0uiuiujkUI77o9975u57789990huhihiuheRJRRJEKTsSSsrEjrzrUizrrTRjkz89394348Q5NTk0NWZjMiIsImFwcGSG89D7S89A8F7DA98DSF7FD8kytu78&rrTRjkz89394348Q5NTk0NWZjMiIsImFwcGSG89D7S89A8F7DA98DSF7FD8kytu78&rrTRjkz89394348Q5NTk0NWZjMiIsImFwcGSG89D7S89A8F7DA98DSF7FD8kytu78&rrTRjkz89394348Q5NTk0NWZjMiIsImFwcGSG89D7S89A8F7DA98DSF7FD8kytu78&aoi988988u9mZhbWlseV9uYW1lIjoiSmFpbiIsImdpdmVuX25hbWUiOiJBc2hpc2giLCJncm91cHMiOlsiNGMyOGQ1OTktZWE0Yy00NzMwLWJjOTQtNzk2ZjA1YzU4OGUzIiwiMmE0YWU5NDAtYWVmOS00OWViLTkyMWQtYTA1OTNmNzE1MzdjIiwiMWY3YjZiYzctNGE2NC00NDU3LThjNmYtZjdmZjU5ZDFkZmQ0IiwiNzA1M2VhYjgtMjgzNS00YmFmLWE1MWEtMjlkM2Q0NzY1NzhjIiwiODc3ZWU1OWMtYzhlMC00YmM4LTgxY2QtZTIwMTdlNmE5NTZkIiwiNzYzNTZmZjQtNzcwMS00OGRkLWEwNzgtYTRmZGI4YzUyNTM4IiwiYzllMTU2MGMtMjRhZC00NzY3LWFkMWItYTFjNTNhOGZiYTE2IiwiNGFmZjZlZTctYzc3YS00M2FmLThhOTYtMGE5ZDI0ZTE3MWVhIl0sImlwYWRkciI6IjE4Mi42OS44OC4yMTMiLCJuYW1lIjoiSmFpbiwgQXNoaXNoIC1Db24iLCJvaWQiOiI3YjRlZjlmMC1mNjMxLTRmMmEtOWY3MS05NWNhZmUyNTQ1ODkiLCJwdWlkIjoiMTAwMzIwMDA1M0RFQUJBNyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6IlFOS3p5QnVKbVRpQWwyb3lDeUp1QTdVcUUxODRYaEl2N2tPYXBuTEI2ZTgiLCJ0aWQiOiJkZTQzZmZjZC1lYTFiLTQ2MTMtOGRmOC00MjViY2Q5Y2U5ODQiLCJ1bmlxdWVfbmFtZSI6ImFzaGlzaC5qYWluQGh1YmVyLmNvbSIsInVwbiI6ImFzaGlzaC5qYWluQGh1YmVyLmNvbSIsInV0aSI6ImJFMGNyVnFPV1Vla2U2RVFUOXhBQUEiLCJ2ZXIiOiIxLjAifQ.GMMKehRzvXWBMk3b-5O6c6WtjDc2IPznkw8_JaYxmY-iVnO-OsR-6upblgzdTKI59VVAJk1MzBQn-znY8h6fOkIzVLN5okAQtNfY4T2Tc3IBaHsY2Pw7OqIQfDG9HJtS6Bab6BPYjpKn2sykw8OgRlZnemIhWg9GoSEyP14l7IYuU-4-oYuCWwAOaBmrAuWvEOEZNvcOjQnbTNm2t9WU4in6AR_ggHbp5zY2WDsoPmkw5ic4vd8Z7J1kgj5Qcx1nqjTR-MmEikxjbYFp6nhHWkwwy6jnya99IPAZkSsyKC4N4hzob8Kf-oy2itsu9GJaCmYZYGBABXUdz49Zno9uSQ

2. Использование библиотеки PowerShell. net (System.Management.Automation.PowerShell)

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlNzWnNCTmhaY0YzUTlTNHRycFFCVEJ5TlJSSSIsImtpZCI6IlNzWnNCTmhaY0YzUTlTNHRycFFCVEJ5TlJSSSJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwcLKSADJFL893W9FU87FG8SF79GSG89D7S89A8F7DA98DSF7FD87ASDFFASASDMFa8dfafa8d98asfJKHKJhkHKJytrULlkjkytu78&J6i0uiuiujkUI77o9975u57789990huhihiuheRJRRJEKTsSSsrEjrzrUizrrTRjkz89394348Q5NTk0NWZjMiIsImFwcGSG89D7S89A8F7DA98DSF7FD8kytu78&rrTRjkz89394348Q5NTk0NWZjMiIsImFwcGSG89D7S89A8F7DA98DSF7FD8kytu78&rrTRjkz89394348Q5NTk0NWZjMiIsImFwcGSG89D7S89A8F7DA98DSF7FD8kytu78&rrTRjkz89394348Q589990huhihiuheRJRRJEKTsSSsrEjrzrUizrrTRjkz89394348Q5NTk0NWZjMiIsImFwcGSG89D7S89A8F7DA98DSF7FD8kytu78&rrTRjkz89394348Q5NTk0NWZNTk0NWZjMiIsImFwcGSG89D7SQ2MTMtOGRmOC00MjViY2Q5Y2U5ODQiLCJ1dGkiOiJpa2VueHFhSHEwLVlOczFNSHE4TkFRIiwidmVyIjoiMS4wIn0.Cl1eMNG_M1iTQzMiM6YJmaBx664_0-Bt_BnCOViKtq-7tRWq5n1PVDjaF-LhkpbzeU5YlQfyK8Y7tkTIg8gwuZJwd2jeiBKVeyriOFOv562OSDCRdguGiqnhZnIpjXIsqXZIqBgb8dDZJCeqrAZ0tdThSe3yiEZ0Ni98JhrltyiZ3SegocrtgHm8PTmYgk05v3d5mrfS1H9v-szuFn8-AWRmtG_3ipiUVpRE2v5MyVzY8D_1_vE_xKknXG2i52c_ltJTpE4uLGjQ3Uw4T6zhP4xbIBzrLynJjxHfzC6DMsPkNk-3SNdtCo9lsR2fj6m1_fOhfAbWknI4oCN2VLB69w

Вы можете увидеть различия в длине токена доступа.

Мой код C#:

public string GetAccessToken()
{
    string accesstoken = "";
    try
    {
        using (PowerShell PowerShellInstance = PowerShell.Create())
        {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.Append(@"Clear-AzureRmContext -Force;");
            stringBuilder.Append(@"$password = ConvertTo-SecureString -String """ + thisApp.xmlSettings.ClientKey +"\""+" -AsPlainText -Force;");
            stringBuilder.Append(@"$cred = New-Object System.Management.Automation.PSCredential("""+thisApp.xmlSettings.ClientId+"\""+",$password);");
            stringBuilder.Append(@"Connect-AzureRmAccount -ServicePrincipal -Credential $cred -Tenant """+thisApp.xmlSettings.TenantId+"\""+";");
            stringBuilder.Append(@"$currentAzureContext = Get-AzureRmContext;$azureRmProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile;$profileClient = New-Object Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient($azureRmProfile);$pat = $profileClient.AcquireAccessToken($currentAzureContext.Subscription.TenantId).AccessToken; Write-Output $pat");

            PowerShellInstance.AddScript(stringBuilder.ToString());

            // prepare a new collection to store output stream objects
            PSDataCollection<PSObject> outputCollection = new PSDataCollection<PSObject>();
            // use this overload to specify an output stream buffer
            IAsyncResult result = PowerShellInstance.BeginInvoke<PSObject, PSObject>(null, outputCollection);

            // do something else until execution has completed.
            // this could be sleep/wait, or perhaps some other work
            while (result.IsCompleted == false)
            {
                Thread.Sleep(1000);
            }
            accesstoken = outputCollection[1].ToString();
        }
    }
    catch (Exception p)
    {
        MessageBox.Show(p.Message + "\n" + p.InnerException);
    }
    return accesstoken;
}

Может ли кто-нибудь сообщить мне, почему это так? почему такая большая разница в токене доступа?

...