doc-locale/fr-fr/integration/saml.md
{{< details >}}
{{< /details >}}
[!note] Pour GitLab.com, consultez SSO SAML pour les groupes GitLab.com.
Cette page décrit comment configurer l'authentification unique (SSO) SAML à l'échelle de l'instance pour GitLab Self-Managed.
Vous pouvez configurer GitLab pour qu'il agisse en tant que fournisseur de services (SP) SAML. Cela permet à GitLab de consommer les assertions d'un fournisseur d'identité (IdP) SAML, tel qu'Okta, pour authentifier les utilisateurs.
Pour plus d'informations sur :
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Assurez-vous que GitLab est configuré avec HTTPS.
Configurez les paramètres communs pour ajouter saml comme fournisseur d'authentification unique. Cela active le provisionnement de compte Just-In-Time pour les utilisateurs qui n'ont pas de compte GitLab existant.
Pour permettre à vos utilisateurs d'utiliser SAML pour s'inscrire sans avoir à créer manuellement un compte au préalable, modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml']
gitlab_rails['omniauth_block_auto_created_users'] = false
Facultatif. Vous devriez lier automatiquement une première connexion SAML aux utilisateurs GitLab existants si leurs adresses e-mail correspondent. Pour ce faire, ajoutez le paramètre suivant dans /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_auto_link_saml_user'] = true
Seule l'adresse e-mail principale du compte GitLab est comparée à l'e-mail dans la réponse SAML.
Par ailleurs, un utilisateur peut lier manuellement son identité SAML à un compte GitLab existant en activant OmniAuth pour un utilisateur existant.
Configurez les attributs suivants pour que vos utilisateurs SAML ne puissent pas les modifier :
NameID.Email lorsqu'il est utilisé avec omniauth_auto_link_saml_user.Si les utilisateurs peuvent modifier ces attributs, ils peuvent se connecter en tant qu'autres utilisateurs autorisés. Consultez la documentation de votre IdP SAML pour savoir comment rendre ces attributs non modifiables.
Modifiez /etc/gitlab/gitlab.rb et ajoutez la configuration du fournisseur :
gitlab_rails['omniauth_providers'] = [
{
name: "saml", # This must be lowercase.
label: "Provider name", # optional label for login button, defaults to "Saml"
args: {
assertion_consumer_service_url: "https://gitlab.example.com/users/auth/saml/callback",
idp_cert_fingerprint: "2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6",
idp_sso_target_url: "https://login.example.com/idp",
issuer: "https://gitlab.example.com",
name_identifier_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
}
}
]
| Argument | Description |
|---|---|
assertion_consumer_service_url | Le point de terminaison HTTPS de GitLab (ajoutez /users/auth/saml/callback à l'URL HTTPS de votre installation GitLab). |
idp_cert_fingerprint | Votre valeur IdP. Pour générer l'empreinte SHA256 à partir du certificat, consultez calculer l'empreinte. |
idp_sso_target_url | Votre valeur IdP. |
issuer | Remplacez par un nom unique qui identifie l'application auprès de l'IdP. |
name_identifier_format | Votre valeur IdP. |
Pour plus d'informations sur ces valeurs, consultez la documentation OmniAuth SAML. Pour plus d'informations sur les autres paramètres de configuration, consultez la configuration de SAML sur votre IdP.
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Assurez-vous que GitLab est configuré avec HTTPS.
Configurez les paramètres communs pour ajouter saml comme fournisseur d'authentification unique. Cela active le provisionnement de compte Just-In-Time pour les utilisateurs qui n'ont pas de compte GitLab existant.
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Pour permettre à vos utilisateurs d'utiliser SAML pour s'inscrire sans avoir à créer manuellement un compte au préalable, modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
enabled: true
allowSingleSignOn: ['saml']
blockAutoCreatedUsers: false
Facultatif. Vous pouvez lier automatiquement les utilisateurs SAML aux utilisateurs GitLab existants si leurs adresses e-mail correspondent, en ajoutant le paramètre suivant dans gitlab_values.yaml :
global:
appConfig:
omniauth:
autoLinkSamlUser: true
Par ailleurs, un utilisateur peut lier manuellement son identité SAML à un compte GitLab existant en activant OmniAuth pour un utilisateur existant.
Configurez les attributs suivants pour que vos utilisateurs SAML ne puissent pas les modifier :
NameID.Email lorsqu'il est utilisé avec omniauth_auto_link_saml_user.Si les utilisateurs peuvent modifier ces attributs, ils peuvent se connecter en tant qu'autres utilisateurs autorisés. Consultez la documentation de votre IdP SAML pour savoir comment rendre ces attributs non modifiables.
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Provider name' # optional label for login button, defaults to "Saml"
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
| Argument | Description |
|---|---|
assertion_consumer_service_url | Le point de terminaison HTTPS de GitLab (ajoutez /users/auth/saml/callback à l'URL HTTPS de votre installation GitLab). |
idp_cert_fingerprint | Votre valeur IdP. Pour générer l'empreinte SHA256 à partir du certificat, consultez calculer l'empreinte. |
idp_sso_target_url | Votre valeur IdP. |
issuer | Remplacez par un nom unique qui identifie l'application auprès de l'IdP. |
name_identifier_format | Votre valeur IdP. |
Pour plus d'informations sur ces valeurs, consultez la documentation OmniAuth SAML. Pour plus d'informations sur les autres paramètres de configuration, consultez la configuration de SAML sur votre IdP.
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Modifiez gitlab_values.yaml et ajoutez la configuration du fournisseur :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Assurez-vous que GitLab est configuré avec HTTPS.
Configurez les paramètres communs pour ajouter saml comme fournisseur d'authentification unique. Cela active le provisionnement de compte Just-In-Time pour les utilisateurs qui n'ont pas de compte GitLab existant.
Pour permettre à vos utilisateurs d'utiliser SAML pour s'inscrire sans avoir à créer manuellement un compte au préalable, modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml']
gitlab_rails['omniauth_block_auto_created_users'] = false
Facultatif. Vous pouvez lier automatiquement les utilisateurs SAML aux utilisateurs GitLab existants si leurs adresses e-mail correspondent, en ajoutant le paramètre suivant dans docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_auto_link_saml_user'] = true
Par ailleurs, un utilisateur peut lier manuellement son identité SAML à un compte GitLab existant en activant OmniAuth pour un utilisateur existant.
Configurez les attributs suivants pour que vos utilisateurs SAML ne puissent pas les modifier :
NameID.Email lorsqu'il est utilisé avec omniauth_auto_link_saml_user.Si les utilisateurs peuvent modifier ces attributs, ils peuvent se connecter en tant qu'autres utilisateurs autorisés. Consultez la documentation de votre IdP SAML pour savoir comment rendre ces attributs non modifiables.
Modifiez docker-compose.yml et ajoutez la configuration du fournisseur :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{
name: "saml",
label: "Provider name", # optional label for login button, defaults to "Saml"
args: {
assertion_consumer_service_url: "https://gitlab.example.com/users/auth/saml/callback",
idp_cert_fingerprint: "2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6",
idp_sso_target_url: "https://login.example.com/idp",
issuer: "https://gitlab.example.com",
name_identifier_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"
}
}
]
| Argument | Description |
|---|---|
assertion_consumer_service_url | Le point de terminaison HTTPS de GitLab (ajoutez /users/auth/saml/callback à l'URL HTTPS de votre installation GitLab). |
idp_cert_fingerprint | Votre valeur IdP. Pour générer l'empreinte SHA256 à partir du certificat, consultez calculer l'empreinte. |
idp_sso_target_url | Votre valeur IdP. |
issuer | Remplacez par un nom unique qui identifie l'application auprès de l'IdP. |
name_identifier_format | Votre valeur IdP. |
Pour plus d'informations sur ces valeurs, consultez la documentation OmniAuth SAML. Pour plus d'informations sur les autres paramètres de configuration, consultez la configuration de SAML sur votre IdP.
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Assurez-vous que GitLab est configuré avec HTTPS.
Configurez les paramètres communs pour ajouter saml comme fournisseur d'authentification unique. Cela active le provisionnement de compte Just-In-Time pour les utilisateurs qui n'ont pas de compte GitLab existant.
Pour permettre à vos utilisateurs d'utiliser SAML pour s'inscrire sans avoir à créer manuellement un compte au préalable, modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
enabled: true
allow_single_sign_on: ["saml"]
block_auto_created_users: false
Facultatif. Vous pouvez lier automatiquement les utilisateurs SAML aux utilisateurs GitLab existants si leurs adresses e-mail correspondent, en ajoutant le paramètre suivant dans /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
auto_link_saml_user: true
Par ailleurs, un utilisateur peut lier manuellement son identité SAML à un compte GitLab existant en activant OmniAuth pour un utilisateur existant.
Configurez les attributs suivants pour que vos utilisateurs SAML ne puissent pas les modifier :
NameID.Email lorsqu'il est utilisé avec omniauth_auto_link_saml_user.Si les utilisateurs peuvent modifier ces attributs, ils peuvent se connecter en tant qu'autres utilisateurs autorisés. Consultez la documentation de votre IdP SAML pour savoir comment rendre ces attributs non modifiables.
Modifiez /home/git/gitlab/config/gitlab.yml et ajoutez la configuration du fournisseur :
omniauth:
providers:
- {
name: 'saml',
label: 'Provider name', # optional label for login button, defaults to "Saml"
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
| Argument | Description |
|---|---|
assertion_consumer_service_url | Le point de terminaison HTTPS de GitLab (ajoutez /users/auth/saml/callback à l'URL HTTPS de votre installation GitLab). |
idp_cert_fingerprint | Votre valeur IdP. Pour générer l'empreinte SHA256 à partir du certificat, consultez calculer l'empreinte. |
idp_sso_target_url | Votre valeur IdP. |
issuer | Remplacez par un nom unique qui identifie l'application auprès de l'IdP. |
name_identifier_format | Votre valeur IdP. |
Pour plus d'informations sur ces valeurs, consultez la documentation OmniAuth SAML. Pour plus d'informations sur les autres paramètres de configuration, consultez la configuration de SAML sur votre IdP.
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Enregistrez le SP GitLab dans votre IdP SAML en utilisant le nom d'application spécifié dans issuer.
Pour fournir des informations de configuration à l'IdP, créez une URL de métadonnées pour l'application. Pour créer l'URL de métadonnées pour GitLab, ajoutez users/auth/saml/metadata à l'URL HTTPS de votre installation GitLab. Par exemple :
https://gitlab.example.com/users/auth/saml/metadata
Au minimum, l'IdP doit fournir une revendication contenant l'adresse e-mail de l'utilisateur en utilisant email ou mail. Pour plus d'informations sur les autres revendications disponibles, consultez la configuration des assertions.
Sur la page de connexion, une icône SAML doit maintenant apparaître sous le formulaire de connexion habituel. Sélectionnez l'icône pour lancer le processus d'authentification. Si l'authentification réussit, vous êtes redirigé vers GitLab et connecté.
Pour configurer une application SAML sur votre IdP, vous avez besoin d'au moins les informations suivantes :
NameID.Pour un exemple de configuration, consultez configurer les fournisseurs d'identité.
Votre IdP peut nécessiter une configuration supplémentaire. Pour plus d'informations, consultez la configuration supplémentaire pour les applications SAML sur votre IdP.
Vous pouvez configurer GitLab pour utiliser plusieurs IdPs SAML si :
args.allowBypassTwoFactor, allowSingleSignOn et syncProfileFromProvider.assertion_consumer_service_url correspond au nom du fournisseur.strategy_class est explicitement défini car il ne peut pas être déduit du nom du fournisseur.[!note] Lorsque vous configurez plusieurs IdPs SAML, pour que les liens de groupe SAML fonctionnent, vous devez configurer tous les IdPs SAML pour qu'ils contiennent des attributs de groupe dans la réponse SAML. Pour plus d'informations, consultez les liens de groupe SAML.
Pour configurer plusieurs IdPs SAML :
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{
name: 'saml', # This must match the following name configuration parameter
label: 'Provider 1' # Differentiate the two buttons and providers in the UI
args: {
name: 'saml', # This is mandatory and must match the provider name
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', # URL must match the name of the provider
strategy_class: 'OmniAuth::Strategies::SAML',
# Include all required arguments similar to a single provider
},
},
{
name: 'saml_2', # This must match the following name configuration parameter
label: 'Provider 2' # Differentiate the two buttons and providers in the UI
args: {
name: 'saml_2', # This is mandatory and must match the provider name
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml_2/callback', # URL must match the name of the provider
strategy_class: 'OmniAuth::Strategies::SAML',
# Include all required arguments similar to a single provider
},
}
]
Pour permettre à vos utilisateurs d'utiliser SAML pour s'inscrire sans avoir à créer manuellement un compte depuis l'un ou l'autre des fournisseurs, ajoutez les valeurs suivantes à votre configuration :
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml', 'saml_2']
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes pour le premier fournisseur SAML :
name: 'saml' # At least one provider must be named 'saml'
label: 'Provider 1' # Differentiate the two buttons and providers in the UI
args:
name: 'saml' # This is mandatory and must match the provider name
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback' # URL must match the name of the provider
strategy_class: 'OmniAuth::Strategies::SAML' # Mandatory
# Include all required arguments similar to a single provider
Placez le contenu suivant dans un fichier nommé saml_2.yaml à utiliser comme Secret Kubernetes pour le second fournisseur SAML :
name: 'saml_2'
label: 'Provider 2' # Differentiate the two buttons and providers in the UI
args:
name: 'saml_2' # This is mandatory and must match the provider name
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml_2/callback' # URL must match the name of the provider
strategy_class: 'OmniAuth::Strategies::SAML' # Mandatory
# Include all required arguments similar to a single provider
Facultatif. Définissez des fournisseurs SAML supplémentaires en suivant les mêmes étapes.
Créez les Secrets Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml \
--from-file=saml=saml.yaml \
--from-file=saml_2=saml_2.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
key: saml
- secret: gitlab-saml
key: saml_2
Pour permettre à vos utilisateurs d'utiliser SAML pour s'inscrire sans avoir à créer manuellement un compte depuis l'un ou l'autre des fournisseurs, ajoutez les valeurs suivantes à votre configuration :
global:
appConfig:
omniauth:
allowSingleSignOn: ['saml', 'saml_2']
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml', 'saml1']
gitlab_rails['omniauth_providers'] = [
{
name: 'saml', # This must match the following name configuration parameter
label: 'Provider 1' # Differentiate the two buttons and providers in the UI
args: {
name: 'saml', # This is mandatory and must match the provider name
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', # URL must match the name of the provider
strategy_class: 'OmniAuth::Strategies::SAML',
# Include all required arguments similar to a single provider
},
},
{
name: 'saml_2', # This must match the following name configuration parameter
label: 'Provider 2' # Differentiate the two buttons and providers in the UI
args: {
name: 'saml_2', # This is mandatory and must match the provider name
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml_2/callback', # URL must match the name of the provider
strategy_class: 'OmniAuth::Strategies::SAML',
# Include all required arguments similar to a single provider
},
}
]
Pour permettre à vos utilisateurs d'utiliser SAML pour s'inscrire sans avoir à créer manuellement un compte depuis l'un ou l'autre des fournisseurs, ajoutez les valeurs suivantes à votre configuration :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml', 'saml_2']
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- {
name: 'saml', # This must match the following name configuration parameter
label: 'Provider 1' # Differentiate the two buttons and providers in the UI
args: {
name: 'saml', # This is mandatory and must match the provider name
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback', # URL must match the name of the provider
strategy_class: 'OmniAuth::Strategies::SAML',
# Include all required arguments similar to a single provider
},
}
- {
name: 'saml_2', # This must match the following name configuration parameter
label: 'Provider 2' # Differentiate the two buttons and providers in the UI
args: {
name: 'saml_2', # This is mandatory and must match the provider name
strategy_class: 'OmniAuth::Strategies::SAML',
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml_2/callback', # URL must match the name of the provider
# Include all required arguments similar to a single provider
},
}
Pour permettre à vos utilisateurs d'utiliser SAML pour s'inscrire sans avoir à créer manuellement un compte depuis l'un ou l'autre des fournisseurs, ajoutez les valeurs suivantes à votre configuration :
production: &base
omniauth:
allow_single_sign_on: ["saml", "saml_2"]
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
La prise en charge de SAML par GitLab vous permet de vous connecter à GitLab via un large éventail d'IdPs.
GitLab fournit le contenu suivant sur la configuration des IdPs Okta et Google Workspace à titre indicatif uniquement. Si vous avez des questions sur la configuration de l'un ou l'autre de ces IdPs, contactez le support de votre fournisseur.
"Single sign-on URL" : utilisez l'URL du service consommateur d'assertions."Audience URI" : utilisez l'émetteur.NameID.idp_sso_target_url dans votre fichier de configuration GitLab.Prérequis :
Pour configurer un Google Workspace :
Utilisez les informations suivantes et suivez les instructions de Set up your own custom SAML application in Google Workspace.
| Valeur typique | Description | |
|---|---|---|
| Nom de l'application SAML | GitLab | D'autres noms sont acceptés. |
| URL ACS | https://<GITLAB_DOMAIN>/users/auth/saml/callback | URL du service consommateur d'assertions. |
GITLAB_DOMAIN | gitlab.example.com | Le domaine de votre instance GitLab. |
| ID de l'entité | https://gitlab.example.com | Une valeur unique à votre application SAML. Définissez-la sur l'issuer dans votre configuration GitLab. |
| Format de l'identifiant de nom | EMAIL | Valeur requise. Également connu sous le nom name_identifier_format. |
| Identifiant de nom | Adresse e-mail principale | Votre adresse e-mail. Assurez-vous que quelqu'un reçoit le contenu envoyé à cette adresse. |
| Prénom | first_name | Prénom. Valeur requise pour communiquer avec GitLab. |
| Nom de famille | last_name | Nom de famille. Valeur requise pour communiquer avec GitLab. |
Configurez les mappages d'attributs SAML suivants :
| Attributs Google Directory | Attributs de l'application |
|---|---|
| Informations de base > E-mail | email |
| Informations de base > Prénom | first_name |
| Informations de base > Nom de famille | last_name |
Vous pourrez utiliser certaines de ces informations lorsque vous configurerez la prise en charge SAML dans GitLab.
Lors de la configuration de l'application SAML Google Workspace, enregistrez les informations suivantes :
| Valeur | Description | |
|---|---|---|
| URL SSO | Dépend | Détails du fournisseur d'identité Google. Définissez ce paramètre sur le paramètre GitLab idp_sso_target_url. |
| Certificat | Téléchargeable | Certificat SAML Google. |
| Empreinte SHA256 | Dépend | Disponible lorsque vous téléchargez le certificat. Pour générer l'empreinte SHA256 à partir du certificat, consultez calculer l'empreinte. |
L'administrateur Google Workspace fournit également les métadonnées IdP, l'identifiant d'entité et l'empreinte SHA-256. Cependant, GitLab n'a pas besoin de ces informations pour se connecter à l'application SAML Google Workspace.
Connectez-vous au centre d'administration Microsoft Entra.
Configurez l'SSO pour cette application.
Les paramètres suivants de votre fichier gitlab.rb correspondent aux champs Microsoft Entra ID :
Paramètre gitlab.rb | Champ Microsoft Entra ID |
|---|---|
issuer | Identifier (Entity ID) |
assertion_consumer_service_url | Reply URL (Assertion Consumer Service URL) |
idp_sso_target_url | Login URL |
idp_cert_fingerprint | Thumbprint |
Définissez les attributs suivants :
user.objectID.
persistent. Pour plus d'informations, consultez la section gérer l'identité SAML des utilisateurs.Pour plus d'informations, consultez une page d'exemple de configuration.
Certains IdPs disposent d'une documentation sur la façon de les utiliser comme IdP dans des configurations SAML. Par exemple :
Si vous avez des questions sur la configuration de votre IdP dans une configuration SAML, contactez le support de votre fournisseur.
{{< details >}}
{{< /details >}}
{{< history >}}
{{< /history >}}
[!note] Ces attributs sont sensibles à la casse.
| Champ | Clés par défaut prises en charge |
|---|---|
| E-mail (requis) | email, mail, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress, http://schemas.microsoft.com/ws/2008/06/identity/claims/emailaddress, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/email, http://schemas.microsoft.com/ws/2008/06/identity/claims/email, urn:oid:0.9.2342.19200300.100.1.3 |
| Nom complet | name, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name, http://schemas.microsoft.com/ws/2008/06/identity/claims/name, urn:oid:2.16.840.1.113730.3.1.241, urn:oid:2.5.4.3 |
| Prénom | first_name, firstname, firstName, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname, http://schemas.microsoft.com/ws/2008/06/identity/claims/givenname, urn:oid:2.5.4.42 |
| Nom de famille | last_name, lastname, lastName, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname, http://schemas.microsoft.com/ws/2008/06/identity/claims/surname, urn:oid:2.5.4.4 |
Lorsque GitLab reçoit une réponse SAML d'un fournisseur SSO SAML, GitLab recherche les valeurs suivantes dans le champ d'attribut name :
"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname""http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname""http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"firstnamelastnameemailVous devez inclure ces valeurs correctement dans le champ d'attribut Name pour que GitLab puisse analyser la réponse SAML. Par exemple, GitLab peut analyser les extraits de réponse SAML suivants :
Ceci est accepté car l'attribut Name est défini sur l'une des valeurs requises du tableau précédent.
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname">
<AttributeValue>Alvin</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname">
<AttributeValue>Test</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress">
<AttributeValue>[email protected]</AttributeValue>
</Attribute>
Ceci est accepté car l'attribut Name correspond à l'une des valeurs du tableau précédent.
<Attribute Name="firstname">
<AttributeValue>Alvin</AttributeValue>
</Attribute>
<Attribute Name="lastname">
<AttributeValue>Test</AttributeValue>
</Attribute>
<Attribute Name="email">
<AttributeValue>[email protected]</AttributeValue>
</Attribute>
Cependant, GitLab ne peut pas analyser les extraits de réponse SAML suivants :
Ceci ne sera pas accepté car la valeur de l'attribut Name ne figure pas parmi les valeurs prises en charge dans le tableau précédent.
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/firstname">
<AttributeValue>Alvin</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/lastname">
<AttributeValue>Test</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/mail">
<AttributeValue>[email protected]</AttributeValue>
</Attribute>
Ceci échouera car, même si FriendlyName a une valeur prise en charge, l'attribut Name ne l'est pas.
<Attribute FriendlyName="firstname" Name="urn:oid:2.5.4.42">
<AttributeValue>Alvin</AttributeValue>
</Attribute>
<Attribute FriendlyName="lastname" Name="urn:oid:2.5.4.4">
<AttributeValue>Test</AttributeValue>
</Attribute>
<Attribute FriendlyName="email" Name="urn:oid:0.9.2342.19200300.100.1.3">
<AttributeValue>[email protected]</AttributeValue>
</Attribute>
Consultez attribute_statements pour :
Pour une liste complète des assertions prises en charge, consultez le gem OmniAuth SAML
Vous pouvez :
GitLab vérifie ces groupes à chaque connexion SAML et met à jour les attributs des utilisateurs si nécessaire. Cette fonctionnalité ne vous permet pas d'ajouter automatiquement des utilisateurs aux groupes GitLab.
La prise en charge de ces groupes dépend de :
| Groupe | Édition | GitLab Enterprise Edition (EE) uniquement ? |
|---|---|---|
| Obligatoire | Gratuite, GitLab Premium, GitLab Ultimate | Oui |
| Externe | Gratuite, GitLab Premium, GitLab Ultimate | Non |
| Admin | Gratuite, GitLab Premium, GitLab Ultimate | Oui |
| Auditeur | GitLab Premium, GitLab Ultimate | Oui |
Prérequis :
Vous devez indiquer à GitLab où rechercher les informations de groupe. Pour ce faire, assurez-vous que votre serveur IdP envoie un AttributeStatement spécifique avec la réponse SAML habituelle. Par exemple :
<saml:AttributeStatement>
<saml:Attribute Name="Groups">
<saml:AttributeValue xsi:type="xs:string">Developers</saml:AttributeValue>
<saml:AttributeValue xsi:type="xs:string">Freelancers</saml:AttributeValue>
<saml:AttributeValue xsi:type="xs:string">Admins</saml:AttributeValue>
<saml:AttributeValue xsi:type="xs:string">Auditors</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
Le nom de l'attribut doit contenir les groupes auxquels appartient un utilisateur. Pour indiquer à GitLab où trouver ces groupes, ajoutez un élément groups_attribute: à vos paramètres SAML. Cet attribut est sensible à la casse.
Votre IdP transmet les informations de groupe à GitLab dans la réponse SAML. Pour utiliser cette réponse, configurez GitLab pour identifier :
groups_attribute.Utilisez le paramètre required_groups pour configurer GitLab afin d'identifier quelle appartenance à un groupe est requise pour se connecter.
Si vous ne définissez pas required_groups ou si vous laissez le paramètre vide, toute personne disposant d'une authentification appropriée peut utiliser le service.
Si l'attribut spécifié dans groups_attribute est incorrect ou manquant, tous les utilisateurs seront bloqués.
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
groups_attribute: 'Groups'
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors']
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Votre IdP transmet les informations de groupe à GitLab dans la réponse SAML. Pour utiliser cette réponse, configurez GitLab pour identifier :
groups_attribute.SAML peut automatiquement identifier un utilisateur comme utilisateur externe, en fonction du paramètre external_groups.
[!note] Si l'attribut spécifié dans
groups_attributeest incorrect ou manquant, l'utilisateur accèdera en tant qu'utilisateur standard.
Exemple de configuration :
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
external_groups: ['Freelancers'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
# or
# idp_cert: '-----BEGIN CERTIFICATE-----\n ... \n-----END CERTIFICATE-----',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
groups_attribute: 'Groups'
external_groups: ['Freelancers']
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
# or
# idp_cert: '-----BEGIN CERTIFICATE-----\n ... \n-----END CERTIFICATE-----',
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
external_groups: ['Freelancers'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
external_groups: ['Freelancers'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Votre IdP transmet les informations de groupe à GitLab dans la réponse SAML. Pour utiliser cette réponse, configurez GitLab pour identifier :
groups_attribute.Utilisez le paramètre admin_groups pour configurer GitLab afin d'identifier quels groupes accordent à l'utilisateur un accès administrateur.
Si l'attribut spécifié dans groups_attribute est incorrect ou manquant, les utilisateurs perdront leur accès administrateur.
Exemple de configuration :
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
admin_groups: ['Admins'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
# or
# idp_cert: '-----BEGIN CERTIFICATE-----\n ... \n-----END CERTIFICATE-----',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
groups_attribute: 'Groups'
admin_groups: ['Admins']
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
admin_groups: ['Admins'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
admin_groups: ['Admins'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
{{< details >}}
{{< /details >}}
Votre IdP transmet les informations de groupe à GitLab dans la réponse SAML. Pour utiliser cette réponse, configurez GitLab pour identifier :
groups_attribute.Utilisez le paramètre auditor_groups pour configurer GitLab afin d'identifier quels groupes incluent des utilisateurs disposant d'un accès auditeur.
Si l'attribut spécifié dans groups_attribute est incorrect ou manquant, les utilisateurs perdront leur accès auditeur.
Exemple de configuration :
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
auditor_groups: ['Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
groups_attribute: 'Groups'
auditor_groups: ['Auditors']
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
auditor_groups: ['Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
auditor_groups: ['Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Pour plus d'informations sur la gestion automatique de l'appartenance aux groupes GitLab, consultez SAML Group Sync.
{{< history >}}
saml_timeout_supplied_by_idp_override.{{< /history >}}
Par défaut, GitLab met fin aux sessions SAML après 24 heures. Vous pouvez personnaliser cette durée avec l'attribut SessionNotOnOrAfter dans l'AuthnStatement SAML2. Cet attribut contient une valeur d'horodatage ISO 8601 qui indique quand mettre fin à la session utilisateur. Lorsqu'il est spécifié, cette valeur remplace le délai d'expiration de session SAML par défaut de 24 heures.
Si l'instance a une durée de session personnalisée configurée qui est antérieure à l'horodatage SessionNotOnOrAfter, les utilisateurs doivent se réauthentifier à la fin de leur session utilisateur GitLab.
{{< history >}}
by_pass_two_factor_current_session.{{< /history >}}
Pour configurer une méthode d'authentification SAML afin qu'elle compte comme une authentification à deux facteurs (2FA) par session, enregistrez cette méthode dans la liste upstream_two_factor_authn_contexts.
Assurez-vous que votre IdP renvoie bien le AuthnContext. Par exemple :
<saml:AuthnStatement>
<saml:AuthnContext>
<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:MediumStrongCertificateProtectedTransport</saml:AuthnContextClassRef>
</saml:AuthnContext>
</saml:AuthnStatement>
Modifiez la configuration de votre installation pour enregistrer la méthode d'authentification SAML dans la liste upstream_two_factor_authn_contexts. Vous devez saisir le AuthnContext de votre réponse SAML.
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
upstream_two_factor_authn_contexts:
%w(
urn:oasis:names:tc:SAML:2.0:ac:classes:CertificateProtectedTransport
urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorOTPSMS
urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorIGTOKEN
),
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
upstream_two_factor_authn_contexts:
- 'urn:oasis:names:tc:SAML:2.0:ac:classes:CertificateProtectedTransport'
- 'urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorOTPSMS'
- 'urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorIGTOKEN'
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
upstream_two_factor_authn_contexts:
%w(
urn:oasis:names:tc:SAML:2.0:ac:classes:CertificateProtectedTransport
urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorOTPSMS
urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorIGTOKEN
)
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
upstream_two_factor_authn_contexts:
[
'urn:oasis:names:tc:SAML:2.0:ac:classes:CertificateProtectedTransport',
'urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorOTPSMS',
'urn:oasis:names:tc:SAML:2.0:ac:classes:SecondFactorIGTOKEN'
]
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Les IdPs doivent signer les réponses SAML pour garantir que les assertions n'ont pas été altérées.
Cela prévient l'usurpation d'identité des utilisateurs et l'élévation de privilèges lorsqu'une appartenance à un groupe spécifique est requise.
idp_cert_fingerprint {#using-idp_cert_fingerprint}Vous pouvez configurer la validation de signature de réponse en utilisant idp_cert_fingerprint. Exemple de configuration :
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
idp_cert {#using-idp_cert}Vous pouvez également configurer GitLab directement en utilisant idp_cert. Exemple de configuration :
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert: '-----BEGIN CERTIFICATE-----
<redacted>
-----END CERTIFICATE-----',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert: |
-----BEGIN CERTIFICATE-----
<redacted>
-----END CERTIFICATE-----
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert: '-----BEGIN CERTIFICATE-----
<redacted>
-----END CERTIFICATE-----',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert: '-----BEGIN CERTIFICATE-----
<redacted>
-----END CERTIFICATE-----',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Si vous avez configuré incorrectement la validation de signature de réponse, vous pourriez voir des messages d'erreur tels que :
Pour plus d'informations sur la résolution de ces erreurs, consultez le guide de dépannage SAML.
Vous pouvez ajouter le paramètre auto_sign_in_with_provider à votre configuration GitLab pour vous rediriger automatiquement vers votre serveur SAML pour l'authentification. Cela supprime l'obligation de sélectionner un élément avant de se connecter.
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_auto_sign_in_with_provider'] = 'saml'
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
autoSignInWithProvider: 'saml'
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_auto_sign_in_with_provider'] = 'saml'
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
auto_sign_in_with_provider: 'saml'
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Chaque tentative de connexion redirige vers le serveur SAML, vous ne pouvez donc pas vous connecter avec des identifiants locaux. Assurez-vous qu'au moins un des utilisateurs SAML dispose d'un accès administrateur.
[!note] Pour contourner le paramètre de connexion automatique, ajoutez
?auto_sign_in=falseà l'URL de connexion, par exemple :https://gitlab.example.com/users/sign_in?auto_sign_in=false.
{{< details >}}
{{< /details >}}
Vous pouvez utiliser attribute_statements pour mapper les noms d'attributs dans une réponse SAML aux entrées du hash info OmniAuth.
[!note] Utilisez ce paramètre uniquement pour mapper les attributs faisant partie du schéma de hash
infod'OmniAuth.
Par exemple, si votre SAMLResponse contient un attribut nommé EmailAddress, spécifiez { email: ['EmailAddress'] } pour mapper l'attribut à la clé correspondante dans le hash info. Les attributs nommés par URI sont également pris en charge, par exemple, { email: ['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'] }.
Utilisez ce paramètre pour indiquer à GitLab où rechercher certains attributs requis pour créer un compte. Par exemple, si votre IdP envoie l'adresse e-mail de l'utilisateur sous la forme EmailAddress au lieu de email, informez GitLab en le définissant dans votre configuration :
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
attribute_statements: { email: ['EmailAddress'] }
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
attribute_statements:
email: ['EmailAddress']
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
attribute_statements: { email: ['EmailAddress'] }
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
attribute_statements: { email: ['EmailAddress'] }
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Par défaut, la partie locale de l'adresse e-mail dans la réponse SAML est utilisée pour générer le nom d'utilisateur GitLab de l'utilisateur.
Configurez username ou nickname dans attribute_statements pour spécifier un ou plusieurs attributs contenant le nom d'utilisateur souhaité :
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
attribute_statements: { nickname: ['username'] }
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
attribute_statements:
nickname: ['username']
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
attribute_statements: { nickname: ['username'] }
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
attribute_statements: { nickname: ['username'] }
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Cela définit également l'attribut username de votre réponse SAML sur le nom d'utilisateur dans GitLab.
{{< history >}}
job_title et organization dans GitLab 17.8.{{< /history >}}
Pour synchroniser les informations de profil depuis votre fournisseur SAML, vous devez configurer attribute_statements pour mapper ces attributs.
Les attributs de profil pris en charge sont :
job_titleorganizationCes attributs n'ont pas de mappages par défaut et ne se synchronisent pas sauf si explicitement configurés.
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Configurez OmniAuth pour synchroniser les attributs souhaités.
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
attribute_statements: {
organization: ['organization'],
job_title: ['job_title']
}
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Configurez OmniAuth pour synchroniser les attributs souhaités.
Enregistrez le contenu YAML suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
attribute_statements:
organization: ['organization']
job_title: ['job_title']
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Configurez OmniAuth pour synchroniser les attributs souhaités.
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
attribute_statements: {
organization: ['organization'],
job_title: ['job_title']
}
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Configurez OmniAuth pour synchroniser les attributs souhaités.
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
attribute_statements: {
organization: ['organization'],
job_title: ['job_title']
}
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
L'horloge de l'IdP peut légèrement avancer par rapport à vos horloges système. Pour tolérer une petite dérive d'horloge, utilisez allowed_clock_drift dans vos paramètres. Vous devez saisir la valeur du paramètre sous forme de nombre et de fraction de secondes. La valeur fournie est ajoutée à l'heure actuelle à laquelle la réponse est validée.
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
allowed_clock_drift: 1 # for one second clock drift
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
groups_attribute: 'Groups'
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors']
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
allowed_clock_drift: 1 # for one second clock drift
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
allowed_clock_drift: 1 # for one second clock drift
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
allowed_clock_drift: 1 # for one second clock drift
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
uid (facultatif) {#designate-a-unique-attribute-for-the-uid-optional}Par défaut, le uid des utilisateurs est défini comme l'attribut NameID dans la réponse SAML. Pour désigner un attribut différent pour le uid, vous pouvez définir le uid_attribute.
Avant de définir le uid sur un attribut unique, assurez-vous d'avoir configuré les attributs suivants afin que vos utilisateurs SAML ne puissent pas les modifier :
NameID.Email lorsqu'il est utilisé avec omniauth_auto_link_saml_user.Si les utilisateurs peuvent modifier ces attributs, ils peuvent se connecter en tant qu'autres utilisateurs autorisés. Consultez la documentation de votre IdP SAML pour savoir comment rendre ces attributs non modifiables. Dans l'exemple suivant, la valeur de l'attribut uid dans la réponse SAML est définie comme le uid_attribute.
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
uid_attribute: 'uid'
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
groups_attribute: 'Groups'
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors']
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
uid_attribute: 'uid'
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
uid_attribute: 'uid'
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
uid_attribute: 'uid'
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Le chiffrement de l'assertion SAML est facultatif mais recommandé. Cela ajoute une couche de protection supplémentaire pour empêcher que des données non chiffrées soient enregistrées dans les journaux ou interceptées par des acteurs malveillants.
[!note] Cette intégration utilise les paramètres
certificateetprivate_keypour le chiffrement des assertions et la signature des requêtes.
Pour chiffrer vos assertions SAML, définissez la clé privée et le certificat public dans les paramètres SAML de GitLab. Votre IdP chiffre l'assertion avec le certificat public et GitLab déchiffre l'assertion avec la clé privée.
Lorsque vous définissez la clé et le certificat, remplacez tous les sauts de ligne dans le fichier de clé par \n. Cela rend le fichier de clé une longue chaîne sans saut de ligne.
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
certificate:|
-----BEGIN CERTIFICATE-----
<redacted>
-----END CERTIFICATE-----,
private_key:|
-----BEGIN PRIVATE KEY-----
<redacted>
-----END PRIVATE KEY-----
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
groups_attribute: 'Groups'
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors']
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
certificate:|
-----BEGIN CERTIFICATE-----
<redacted>
----END CERTIFICATE-----,
private_key:|
-----BEGIN PRIVATE KEY-----
<redacted>
-----END PRIVATE KEY-----
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
certificate:|
-----BEGIN CERTIFICATE-----
<redacted>
-----END CERTIFICATE-----,
private_key:|
-----BEGIN PRIVATE KEY-----
<redacted>
-----END PRIVATE KEY-----
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
groups_attribute: 'Groups',
required_groups: ['Developers', 'Freelancers', 'Admins', 'Auditors'],
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----',
private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----'
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
Vous pouvez configurer GitLab pour signer les requêtes d'authentification SAML. Cette configuration est facultative car les requêtes SAML de GitLab utilisent la liaison de redirection SAML.
Pour implémenter la signature :
Créez une paire clé privée/certificat public pour votre instance GitLab à utiliser avec SAML.
Configurez les paramètres de signature dans la section security de la configuration. Par exemple :
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Modifiez /etc/gitlab/gitlab.rb :
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----',
private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----',
security: {
authn_requests_signed: true, # enable signature on AuthNRequest
want_assertions_signed: true, # enable the requirement of signed assertion
want_assertions_encrypted: false, # enable the requirement of encrypted assertion
metadata_signed: false, # enable signature on Metadata
signature_method: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256',
digest_method: 'http://www.w3.org/2001/04/xmlenc#sha256',
}
}
}
]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Placez le contenu suivant dans un fichier nommé saml.yaml à utiliser comme Secret Kubernetes :
name: 'saml'
label: 'Our SAML Provider'
args:
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback'
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6'
idp_sso_target_url: 'https://login.example.com/idp'
issuer: 'https://gitlab.example.com'
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----'
private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----'
security:
authn_requests_signed: true # enable signature on AuthNRequest
want_assertions_signed: true # enable the requirement of signed assertion
want_assertions_encrypted: false # enable the requirement of encrypted assertion
metadata_signed: false # enable signature on Metadata
signature_method: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'
digest_method: 'http://www.w3.org/2001/04/xmlenc#sha256'
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-saml --from-file=provider=saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml :
global:
appConfig:
omniauth:
providers:
- secret: gitlab-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Modifiez docker-compose.yml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_providers'] = [
{ name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----',
private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----',
security: {
authn_requests_signed: true, # enable signature on AuthNRequest
want_assertions_signed: true, # enable the requirement of signed assertion
want_assertions_encrypted: false, # enable the requirement of encrypted assertion
metadata_signed: false, # enable signature on Metadata
signature_method: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256',
digest_method: 'http://www.w3.org/2001/04/xmlenc#sha256',
}
}
}
]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Modifiez /home/git/gitlab/config/gitlab.yml :
production: &base
omniauth:
providers:
- { name: 'saml',
label: 'Our SAML Provider',
args: {
assertion_consumer_service_url: 'https://gitlab.example.com/users/auth/saml/callback',
idp_cert_fingerprint: '2f:cb:19:57:68:c3:9e:9a:94:ce:c2:c2:e3:2c:59:c0:aa:d7:a3:36:5c:10:89:2e:81:16:b5:d8:3d:40:96:b6',
idp_sso_target_url: 'https://login.example.com/idp',
issuer: 'https://gitlab.example.com',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
certificate: '-----BEGIN CERTIFICATE-----\n<redacted>\n-----END CERTIFICATE-----',
private_key: '-----BEGIN PRIVATE KEY-----\n<redacted>\n-----END PRIVATE KEY-----',
security: {
authn_requests_signed: true, # enable signature on AuthNRequest
want_assertions_signed: true, # enable the requirement of signed assertion
want_assertions_encrypted: false, # enable the requirement of encrypted assertion
metadata_signed: false, # enable signature on Metadata
signature_method: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256',
digest_method: 'http://www.w3.org/2001/04/xmlenc#sha256',
}
}
}
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
GitLab effectue ensuite les opérations suivantes :
Pour plus d'informations sur cette option, consultez la documentation du gem Ruby SAML.
Le gem Ruby SAML est utilisé par le gem OmniAuth SAML pour implémenter le côté client de l'authentification SAML.
[!note] La liaison de redirection SAML est différente de la liaison POST SAML. Dans la liaison POST, la signature est requise pour empêcher les intermédiaires de falsifier les requêtes.
GitLab génère et définit des mots de passe pour les utilisateurs créés via SAML.
Les utilisateurs authentifiés via SSO ou SAML ne doivent pas utiliser de mot de passe pour les opérations Git via HTTPS. Ces utilisateurs peuvent à la place :
Un administrateur peut configurer GitLab pour lier automatiquement les utilisateurs SAML aux utilisateurs GitLab existants. Pour plus d'informations, consultez Configurer la prise en charge SAML dans GitLab.
Un utilisateur peut lier manuellement son identité SAML à un compte GitLab existant. Pour plus d'informations, consultez Activer OmniAuth pour un utilisateur existant.
{{< details >}}
{{< /details >}}
Utilisez le SSO SAML de groupe si vous devez autoriser l'accès via plusieurs IdPs SAML sur votre instance GitLab Self-Managed.
Pour configurer le SSO SAML de groupe :
{{< tabs >}}
{{< tab title="Paquet Linux (Omnibus)" >}}
Assurez-vous que GitLab est configuré avec HTTPS.
Modifiez /etc/gitlab/gitlab.rb pour activer OmniAuth et le fournisseur group_saml :
gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_providers'] = [{ name: 'group_saml' }]
Enregistrez le fichier et reconfigurez GitLab :
sudo gitlab-ctl reconfigure
{{< /tab >}}
{{< tab title="Chart Helm (Kubernetes)" >}}
Assurez-vous que GitLab est configuré avec HTTPS.
Placez le contenu suivant dans un fichier nommé group_saml.yaml à utiliser comme Secret Kubernetes :
name: 'group_saml'
Créez le Secret Kubernetes :
kubectl create secret generic -n <namespace> gitlab-group-saml --from-file=provider=group_saml.yaml
Exportez les valeurs Helm :
helm get values gitlab > gitlab_values.yaml
Modifiez gitlab_values.yaml pour activer OmniAuth et le fournisseur group_saml :
global:
appConfig:
omniauth:
enabled: true
providers:
- secret: gitlab-group-saml
Enregistrez le fichier et appliquez les nouvelles valeurs :
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
{{< /tab >}}
{{< tab title="Docker" >}}
Assurez-vous que GitLab est configuré avec HTTPS.
Modifiez docker-compose.yml pour activer OmniAuth et le fournisseur group_saml :
version: "3.6"
services:
gitlab:
environment:
GITLAB_OMNIBUS_CONFIG: |
gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_providers'] = [{ name: 'group_saml' }]
Enregistrez le fichier et redémarrez GitLab :
docker compose up -d
{{< /tab >}}
{{< tab title="Auto-compilée (source)" >}}
Assurez-vous que GitLab est configuré avec HTTPS.
Modifiez /home/git/gitlab/config/gitlab.yml pour activer OmniAuth et le fournisseur group_saml :
production: &base
omniauth:
enabled: true
providers:
- { name: 'group_saml' }
Enregistrez le fichier et redémarrez GitLab :
# For systems running systemd
sudo systemctl restart gitlab.target
# For systems running SysV init
sudo service gitlab restart
{{< /tab >}}
{{< /tabs >}}
En tant que solution multi-locataire, le SAML de groupe sur GitLab Self-Managed est limité par rapport au SAML à l'échelle de l'instance recommandé. Utilisez le SAML à l'échelle de l'instance pour bénéficier de :
Lors de la configuration d'une application SAML sur l'IdP, votre IdP peut nécessiter une configuration supplémentaire, telle que :
| Champ | Valeur | Notes |
|---|---|---|
| Profil SAML | Profil SSO de navigateur web | GitLab utilise SAML pour connecter les utilisateurs via leur navigateur. Aucune requête n'est effectuée directement auprès de l'IdP. |
| Liaison de requête SAML | Redirection HTTP | GitLab (le SP) redirige les utilisateurs vers votre IdP avec un paramètre HTTP SAMLRequest encodé en base64. |
| Liaison de réponse SAML | HTTP POST | Spécifie comment le jeton SAML est envoyé par votre IdP. Inclut le SAMLResponse, que le navigateur d'un utilisateur soumet à GitLab. |
| Signer la réponse SAML | Obligatoire | Empêche la falsification. |
| Certificat X.509 dans la réponse | Obligatoire | Signe la réponse et la vérifie par rapport à l'empreinte fournie. |
| Algorithme d'empreinte | SHA-1 | GitLab utilise un hachage SHA-1 du certificat pour signer la réponse SAML. |
| Algorithme de signature | SHA-1/SHA-256/SHA-384/SHA-512 | Détermine la façon dont une réponse est signée. Également connu sous le nom de méthode de condensat, cet algorithme peut être spécifié dans la réponse SAML. |
| Chiffrement de l'assertion SAML | Facultatif | Utilise TLS entre votre fournisseur d'identité, le navigateur de l'utilisateur et GitLab. |
| Signature de l'assertion SAML | Facultatif | Valide l'intégrité d'une assertion SAML. Lorsqu'elle est active, signe l'ensemble de la réponse. |
| Vérification de la signature des requêtes SAML | Facultatif | Vérifie la signature de la réponse SAML. |
| RelayState par défaut | Facultatif | Spécifie les sous-chemins de l'URL de base sur lesquels les utilisateurs doivent arriver après s'être connectés via SAML auprès de votre IdP. |
| Format NameID | Persistant | Voir les détails du format NameID. |
| URL supplémentaires | Facultatif | Peut inclure l'émetteur, l'identifiant ou l'URL du service consommateur d'assertion dans d'autres champs selon les fournisseurs. |
Pour des exemples de configurations, consultez les notes sur les fournisseurs spécifiques.
Pour configurer Geo avec SAML, consultez Configuration de SAML à l'échelle de l'instance.
Pour plus d'informations, consultez Geo avec Single Sign On (SSO).
Consultez notre guide de dépannage SAML.