Клонирование Git Репо с использованием TFS Personal Access Token

Я пытаюсь программно клонировать git-репозиторий. Мое приложение ASP.NET MVC создает и запускает процесс. Код для обработки процессов работает корректно, однако при попытке использовать TFS в исходной PAT для клонирования репозитория git происходит сбой аутентификации. Я не могу использовать NTLM или требовать от пользователя ввода учетных данных. Я могу подтвердить, что моя обработка кода С#, создающая процессы для использования оболочки git bash программно, работает, поскольку у меня нет проблем на локальном компьютере, но при работе на IIS возникает проблема. Я попробовал следующие два метода.

Метод 1: git clone http://anyusername: PAT @tfs2017: 8080/tfs/DefaultCollection/_git/Git %20Repository

PAT - это токен, который я сгенерировал для своего пользователя. Я также пытался закодировать его в base64.

Способ 2: По предложению человека на социальном форуме MS.

git -c http.extraheader = "AUTHORIZATION: bearer { base64encodedPAT }" clone { url }

Оригинальный вопрос форума MS для справки: https://social.msdn.microsoft.com/Forums/vstudio/en-US/0107cf1f-7fe4-4429-af74-ca7d2be7405e/using-personal-access-tokens-in-tfs -2017? форум = tfsversioncontrol

Ответ 1

Если у вас есть PAT, вам не нужен пароль: PAT будет действовать как ваше имя пользователя.
Посмотрите, работает ли следующее:

git clone http://[email protected]:8080/tfs/DefaultCollection/_git/Git%20Repository

Ответ 2

Я был немного смущен после прочтения статьи из MS. Попробовав несколько способов, я наконец смог использовать свой PAT против TFS и VSTS GIT Repos.

Единственный способ получить клон моего репозитория GIT с помощью PAT - установить http.extraheader в командной строке GIT.
Тег авторизации должен указывать на базовую аутентификацию, протокол должен быть HTTPS, а токен должен быть закодирован в BASE64, включая (вымышленное) имя пользователя.

Пример:

git -c http.extraheader="AUTHORIZATION: Basic TXlHaXRTeW5jVXNlcjo2bHFqNXJkcHEzdXBxZWVmd2o3bDduZXN5NTR3d3gxNHFobDVlanl5NTVkb2g0M3d4YzRh" clone https://tfs.address/tfs/Collection/Project/_git/RepoName

Используется базовый токен в кодировке BASE64:

TXlHaXRTeW5jVXNlcjo2bHFqNXJkcHEzdXBxZWVmd2o3bDduZXN5NTR3d3gxNHFobDVlanl5NTVkb2g0M3d4YzRh

Базовый токен BASE64 расшифрован:

MyGitSyncUser:6lqj5rdpq3upqeefwj7l7nesy54wwx14qhl5ejyy55doh43wxc4a

Токен построен из <fictional user name>:<PAT from a user with rights in the project>

В этом примере:

Вымышленное имя пользователя: MyGitSyncUser Используется PAT: 6lqj5rdpq3upqeefwj7l7nesy54wwx14qhl5ejyy55doh43wxc4a

PAT scope: Code (Read)

На данный момент TFS/VSTS не принимает заголовки "AUTHORIZATION: Bearer" :(

Возможно, это поможет кому-то использовать PAT в TFS/VSTS.

Примечание: HTTPS необходим для базовой аутентификации!

Ответ 3

Вы можете использовать CredentialManager, программно добавляя токен к машине, так же, как это сделал бы CredentialManager.
В Windows я использую инструменты cmdkey следующим образом:

cmdkey /generic:"git:https://yourdomain.visualstudio.com" /user:"Personal Access Token" /pass:"yourtokenhere"

В MacOS добавьте запись в цепочку ключей:

security add-generic-password -a "Personal Access Token" -D "Credential" -s "gcm4ml:git:https://yourdomain.visualstudio.com" -w "yourtokenhere" -A

Примечание. Избегайте использования -A, который позволяет любому приложению получить к нему доступ.

Пока CredentialManager установлен на Git, он должен работать.