Найти владельца VSTS PAT через API - PullRequest
0 голосов
/ 07 июня 2018

Я унаследовал сценарий PowerShell, который интегрируется с API-интерфейсами VSTS и аутентифицируется с использованием PAT (токена личного доступа), который в настоящее время хранится в безопасном пароле нашей команды.

Однако происхождение PATбыли потеряны в глубине веков, и я понятия не имею, какой член команды создал его в первую очередь (и они могут даже не работать здесь!), или учетная запись VSTS пользователя, в которой он определен.

Используя просто PAT, есть ли какие-либо конечные точки типа "who-am-i" в API-интерфейсах VSTS, к которым я могу обратиться, которые отражают имя пользователя, guid или другие детали учетной записи PATопределяется в?

Есть несколько причин, по которым я хочу выяснить, где определен PAT, а не просто выдать новую из другой учетной записи:

  • , поэтому яможет получить новый, выданный в той же учетной записи, когда истекает текущий
  • , поэтому мы можем заставить владельца отозвать существующий при необходимости

Cheers

1018 * М

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Основываясь на ответе Марины, я написал следующий скрипт PowerShell для создания новой задачи с использованием PAT для аутентификации.Затем вы можете проверить свойство «fields -> System.CreatedBy» в ответе json, чтобы увидеть, к какой учетной записи принадлежит PAT.

$ErrorActionPreference = "Stop";
$ProgressPreference = "SilentlyContinue";
Set-StrictMode -Version "Latest";


$vstsAccount     = "myaccount";     # e.g. "myaccount" in "https://myaccount.visualstudio.com"
$vstsProjectName = "myprojectname"; # e.g. "myprojectname" in "https://myaccount.visualstudio.com/myprojectname"
$vstsPat         = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";


function Invoke-VstsWebRequest
{
    param
    (
        [string] $Uri,
        [string] $Pat,
        [string] $Method,
        [string] $Body,
        [string] $ContentType
    )
    write-host "uri = '$Uri'";
    $splat = @{
        "Uri"     = $Uri
        "Headers" = @{
            "Authorization" = "Basic " +
                [System.Convert]::ToBase64String(
                    [System.Text.ASCIIEncoding]::ASCII.GetBytes(
                       [string]::Format("{0}:{1}", "", $Pat)
                    ) 
                )
        }
        "Method" = $Method
        "UseBasicParsing" = $true
    }
    if( -not [string]::IsNullOrEmpty($Body) )
    {
        write-host "body = ";
        write-host $Body;
        $splat.Add("ContentType", $ContentType); 
        $splat.Add("Body", $Body);
    }
    $response = Invoke-WebRequest @splat;
    write-host "response = ";
    write-host ($response.Content | ConvertFrom-Json | ConvertTo-Json);
    return $response.Content;
}


# get existing work items in the specified project
# (not necessary, but useful for testing)
$uri  = "https://$vstsAccount.visualstudio.com/$vstsProjectName/_apis/wit/wiql?%24top=50&api-version=4.1";
$query = @"
SELECT [System.ID],
       [System.Title]
FROM workitems
WHERE [System.TeamProject] = '{0}'
ORDER BY [System.Title]
"@;
$body = ConvertTo-Json ([ordered] @{
    "query" = [string]::Format($query, $vstsProjectName)
});
$type = "application/json";
$json = Invoke-VstsWebRequest -Uri $uri -Pat $vstsPat -Method "Post" -Body $body -ContentType $type;


# create a new "Task" work item in the specified project
# (the response will show the user account associated with the PAT)
$uri  = "https://$vstsAccount.visualstudio.com/$vstsProjectName/_apis/wit/workitems/`$Task?api-version=4.1";
$body = ConvertTo-Json @([ordered] @{
    "op"    = "add"
    "path"  = "/fields/System.Title"
    "value" = "my sample task"
});
$type = "application/json-patch+json";
$json = Invoke-VstsWebRequest -Uri $uri -Pat $vstsPat -Method "Post" -Body $body -ContentType $type;

Вывод:

...
"System.CreatedBy":"My Username <my.username@example.org>"
...

PS I 'Мы разместили билет UserVoice, запрашивающий конечную точку who-am-i здесь: https://visualstudio.uservoice.com/forums/330519-visual-studio-team-services/suggestions/34509568-provide-a-who-am-i-endpoint-in-the-vsts-api-to-i

0 голосов
/ 08 июня 2018

Сам VSTS не может показать, кто создал PAT.

Но если вы знаете значение PAT, вы можете найти пользователя, создавшего PAT, создав элемент wotk.Например, вы можете использовать PAT для создания элемента wotk Задачи, а затем пользователь, создавший элемент Task wotj, является личностью, создавшей PAT.

Кроме того, вы можете использовать эту функцию, создав пользовательский голос .

...