Аутентификация на Azure Devops Git репо - PullRequest
0 голосов
/ 04 мая 2020

Мы работаем над системой автоматической фиксации сгенерированных проектов в Git репозиториях, расположенных в Azure Devops. Мы хотим использовать libgit2sharp для этого. Мы хотим, чтобы пользователь проходил аутентификацию с использованием своей учетной записи Microsoft, извлекал токен доступа (jwt) из запроса на аутентификацию и использовал его в качестве средства аутентификации. Но мы не можем заставить это работать.

В другом посте я прочитал 2 других метода аутентификации: 1. Альтернативные учетные записи. 2. Персональные токены доступа, PAT. Оба сделаны в разделах профиля вашей учетной записи devops.

Я могу заставить альтернативные учетные записи работать отлично, но это не наш предпочтительный маршрут, так как он потребует от пользователя дополнительных действий. PAT, кажется, не работает для меня и выдает ошибку, что было «слишком много перенаправлений или повторов аутентификации». Я подумал, что это из-за двухфакторной аутентификации, которая включена в учетной записи Microsoft.

Поддерживается ли даже использование токена доступа (jwt) в LibGit2Sharp с включенным 2FA?

using (var repo = new Repository({repo location}))
            {
                foreach (var file in file)
                {
                    repo.Index.Add(file.Path);
                    repo.Index.Write();
                }

                var author = new Signature("{name}", "{name}", DateTime.Now);
                var committer = author;

                repo.Commit("Here's a commit i made!", author, committer);

                var options = new PushOptions();
                options.CredentialsProvider = (url, user, cred) => new UsernamePasswordCredentials() { Username = "{username}", Password = "{password}" };

                repo.Network.Push(repo.Branches["master"], options);
            }

1 Ответ

0 голосов
/ 04 мая 2020

Персональные токены доступа (PAT) do bypass MFA, так что это, вероятно, не та ошибка, которую вы получаете. PAT - ваш лучший вариант, на момент операции pu sh вам необходимо, чтобы remote-url вашего локального репо Git было следующим:

https://pat:{PAT_HERE}@dev.azure.com/...

например,

https://pat:gaakbfootuial7ksj4uv55o52335tyhhaasbqdvbg5xgyy33t754@dev.azure.com/auroraloop/devenv/_git/devenv

Советы:

  • PAT получит разрешения для пользователя Azure DevOps, который сгенерировал его, так что пользователь должен иметь права на добавление репо.
  • Вы не можете автоматизировать создание PAT , вы должны где-то хранить его заранее, если вы не хотите жестко задавать код (вы не должны) подумать об использовании Azure Key Vault для хранения и извлечения значения. Я уверен, что у них есть c# библиотеки.

Часть вашего кода options.CredentialsProvider, вероятно, делает именно то, что я упоминал о настройке попытки remote-url. это выглядит следующим образом:

options.CredentialsProvider = (url, user, cred) => new UsernamePasswordCredentials() { Username = "pat", Password = "{PAT_HERE}" };

Жесткий код PAT для тестирования и в случае успеха ознакомьтесь с подходом Azure Key Vault.

...