Lire en anglais

Partager via


Authentification distante

Les registres et vcpkg_from_git() utilisent directement les outils en ligne de commande Git pour récupérer des ressources distantes. Certaines de ces ressources peuvent être protégées contre l’accès anonyme et nécessitent une authentification ou des informations d’identification.

Les stratégies ci-dessous cherchent à atteindre le même objectif fondamental : git clone https://.... doivent réussir sans interaction. Cela permet à vcpkg d’être séparé des spécificités de votre schéma d’authentification, ce qui garantit la compatibilité directe avec toutes les améliorations de sécurité supplémentaires à l’avenir.

Informations d’identification Git de prédéfinir

Vous pouvez prédéfinir les informations d’identification Git via 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

Authentification du porteur

Pour les systèmes qui ont besoin de l’authentification du porteur, vous pouvez utiliser git config:

Notes

Vous devez apporter ces modifications de configuration avec --global

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

Il <uri> peut être rempli avec une variété d’options, par exemple https://dev.azure.com/MYORG/. Pour plus d’informations, consultez la git config documentation.

(Source d’origine dans : Meilleure façon de s’authentifier auprès d’un référentiel Git dans un processus de génération.

Utilisateurs Azure DevOps : vous devrez peut-être activer l’accès via l’étendue d’autorisation du travail et référencer le référentiel dans votre pipeline yaml :

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

...

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

À l’aide VCPKG_KEEP_ENV_VARS ou VCPKG_ENV_PASSTHROUGH_UNTRACKED, vous pouvez transmettre des informations d’identification via l’environnement.

export VCPKG_KEEP_ENV_VARS=MY_TOKEN_VAR
export MY_TOKEN_VAR=abc123

Vous pouvez ensuite l’utiliser dans vos ports privés avec les pvcpkg_from_git() ou vcpkg_from_github() les helpers.

# 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}"
)

Pour les ports privés, nous vous recommandons d’utiliser vcpkg_from_git()vcpkg_from_github() plutôt que la méthode de pré-amorçage ci-dessus.

Passer les informations d’identification GitUsernamePassword Jenkins

L’option la plus simple et la plus sécurisée pour l’authentification GitHub auprès de GitHub à partir de Jenkins utilise GitHub App et les éléments suivants :

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

Cela définit le GIT_ASKPASS chemin d’accès au script d’assistance qui répond avec la requête d’informations d’identification Git et indique vcpkg de conserver cette variable d’environnement. Le mot de passe est un jeton d’application GitHub avec une durée de vie de 1 heure.