Ответ 1
Если у вас есть PAT, вам не нужен пароль: PAT будет действовать как ваше имя пользователя.
Посмотрите, работает ли следующее:
git clone http://[email protected]:8080/tfs/DefaultCollection/_git/Git%20Repository
Я пытаюсь программно клонировать 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
Если у вас есть PAT, вам не нужен пароль: PAT будет действовать как ваше имя пользователя.
Посмотрите, работает ли следующее:
git clone http://[email protected]:8080/tfs/DefaultCollection/_git/Git%20Repository
Я был немного смущен после прочтения статьи из 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 необходим для базовой аутентификации!
Вы можете использовать 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, он должен работать.