Freigeben über


Remoteauthentifizierung

Registrieren und vcpkg_from_git() direkt die Git-Befehlszeilentools verwenden, um Remoteressourcen abzurufen. Einige dieser Ressourcen sind möglicherweise vor anonymen Zugriffen geschützt und benötigen eine Authentifizierung oder Anmeldeinformationen.

Die unten stehenden Strategien versuchen, dasselbe grundlegende Ziel zu erreichen: git clone https://.... sollte ohne Interaktion erfolgreich sein. Dadurch kann vcpkg von den Besonderheiten Ihres Authentifizierungsschemas getrennt werden, wodurch die Vorwärtskompatibilität mit weiteren Sicherheitsverbesserungen in Zukunft sichergestellt wird.

Vorab-Seed-Git-Anmeldeinformationen

Sie können Git-Anmeldeinformationen vor dem Seeden über git credential approve:

Powershell:

"url=https://github.com`npath=Microsoft/vcpkg`nusername=unused`npassword=$MY_PAT`n" | git credential approve

Bash:

echo "url=https://github.com"$'\n'"path=Microsoft/vcpkg"$'\n'"username=unused"$'\n'"password=$MY_PAT"$'\n' | git credential approve

Bearer-Authentifizierung

Für Systeme, die Bearerauth benötigen, können Sie Folgendes verwenden git config:

Hinweis

Sie müssen diese Konfigurationsänderungen mit --global

git config --global --unset-all http.<uri>.extraheader
git config --global http.<uri>.extraheader "AUTHORIZATION: bearer <System_AccessToken>"

Die <uri> Kann mit einer Vielzahl von Optionen gefüllt werden, z. B https://dev.azure.com/MYORG/. . Weitere Informationen finden Sie in der git config Dokumentation.

(Ursprüngliche Quelle in: Am besten können Sie sich bei einem Git-Repository in einem Buildprozess authentifizieren.

Azure DevOps-Benutzer: Möglicherweise müssen Sie den Zugriff über den Auftragsautorisierungsbereich aktivieren und auf das Repository in Ihrer Yaml-Pipeline verweisen:

resources: 
  repositories:
    - repository: <FRIENDLYNAME>
      type: git
      name: <ORG>/<REPO>
      tag: tags/<TAG>

...

jobs:
 - job: Build
   uses:
     repositories: [<FRIENDLYNAME>]

Mit VCPKG_KEEP_ENV_VARS oder VCPKG_ENV_PASSTHROUGH_UNTRACKED, können Sie Anmeldeinformationen über die Umgebung übergeben.

export VCPKG_KEEP_ENV_VARS=MY_TOKEN_VAR
export MY_TOKEN_VAR=abc123

Dies kann dann in Ihren privaten Ports mit den Pvcpkg_from_git() - oder vcpkg_from_github() Helfern verwendet werden.

# vcpkg-from-git-example/portfile.cmake
set(MY_TOKEN_VAR "")
if(DEFINED ENV{MY_TOKEN_VAR})
    set(MY_TOKEN_VAR "$ENV{MY_TOKEN_VAR}@")
endif()
vcpkg_from_git(
    URLS "https://${MY_TOKEN_VAR}host.com/normal/url/path"
    ...
)
# vcpkg-from-github-example/portfile.cmake
vcpkg_from_github(
    AUTHORIZATION_TOKEN "$ENV{MY_TOKEN_VAR}"
)

Für private Ports empfehlen wir die Verwendung vcpkg_from_git() anstelle und vcpkg_from_github() die oben beschriebene Vor-Seeding-Methode.

Übergeben von Jenkins gitUsernamePassword-Anmeldeinformationen

Die einfachste und sicherste Option für die Git-Authentifizierung bei GitHub von Jenkins verwendet GitHub-App und folgendes:

withCredentials([gitUsernamePassword(credentialsId: 'jenkins-github-app')]) {
  withEnv(['VCPKG_KEEP_ENV_VARS=GIT_ASKPASS']) {
    bat 'cmake'
  }
}

Dadurch wird der GIT_ASKPASS Pfad zum Hilfsskript festgelegt, das mit git-Anmeldeinformationsabfragen vcpkg antwortet und anweist, diese Umgebungsvariable beizubehalten. Das Kennwort ist ein GitHub-App-Token mit einer Lebensdauer von 1 Stunde.