Configuration SSO

Toute la configuration du SSO s'effectue par le biais des fichiers de configuration ou de l'interface en ligne de commande (../../admin/cli/sso.md). Ce chapitre couvre les fichiers de configuration.

Il y a deux fichiers impliqués :

  • server.conf
  • sso.conf

Le fichier server.conf est utilisé uniquement pour activer ou désactiver la fonctionnalité SSO dans son ensemble, tandis que sso.conf traite des détails de la façon dont le SSO doit fonctionner une fois activé.

Les fichiers appartiennent aux serveurs Zato et n'existent pas avec d'autres composants, par exemple, un administrateur web ou un planificateur Zato ne les ont pas.

Les deux fichiers se trouvent dans le sous-répertoire config/repo de chaque serveur.

Par exemple, si le chemin d'accès au serveur est /opt/zato/env/server1, les fichiers se trouvent dans le répertoire :

  • /opt/zato/env/server1/config/repo/server.conf
  • /opt/zato/env/server1/config/repo/sso.conf

Activer ou désactiver le SSO

  • Pour activer ou désactiver le SSO, définissez la clé sso de la stanza component_enabled dans server.conf à True ou False, par exemple:
  [component_enabled]
  ..
  sso=True
  ..
  • La modification doit être appliquée à tous les serveurs et tous doivent redémarrer pour que la modification soit effective.
  • Notez qu'après avoir changé le flag à True ou False à partir de sa valeur précédente, tous les serveurs doivent être démarrés avec l'option --sync-internal, qui est utilisée pour repeupler un cache interne d'objets intégrés - cependant, cela ne doit être fait qu'une seule fois après le changement du flag, l'utilisation de l'option après fait démarrer les serveurs plus longtemps, donc cela ne devrait plus être fait une fois que le flag est changé.
$ zato start /path/to/server --sync-internal

sso.conf

Le fichier sso.conf est celui où se fait toute la configuration du SSO. Sa forme par défaut est présentée ci-dessous pour référence et ce qui suit est une discussion sur chaque entrée de configuration.

Notez que toutes les modifications apportées au fichier doivent être appliquées dans chaque serveur Zato et qu'après chaque modification, ce serveur doit être redémarré.

[main]
encrypt_email=True
encrypt_password=True
smtp_conn=sso.notifications

[backend]
default=sql

[sql]
name=

[hash_secret]
rounds=100000
salt_size=64 # In bytes = 512 bits

[apps]
all=
signup_allowed=
login_allowed=
login_metadata_allowed=
inform_if_app_invalid=True

[login]
reject_if_not_listed=False
inform_if_locked=True
inform_if_not_confirmed=True
inform_if_not_approved=True

[password_reset]
valid_for=1440 # In minutes = 1 day
password_change_session_duration=1800 # In seconds = 30 minutes
user_search_by=username
email_title_en_GB=Password reset
email_title_en_US=Password reset
email_from=hello@example.com

[login_list]

[session]
expiry=60 # In minutes

[password]
expiry=730 # In days, 365 days * 2 years = 730 days
inform_if_expired=False
inform_if_about_to_expire=True
inform_if_must_be_changed=True
inform_if_invalid=True
about_to_expire_threshold=30 # In days
log_in_if_about_to_expire=True
min_length=8
max_length=256
reject_list = """
  111111
  123123
  123321
  123456
  123qwe
  1q2w3e
  1q2w3e4r
  1q2w3e4r5t
  222222
  333333
  444444
  555555
  654321
  666666
  777777
  888888
  999999
  987654321
  google
  letmein
  mynoob
  password
  qwerty
  zxcvbnm
"""

[signup]
inform_if_user_exists=False
inform_if_user_invalid=False
inform_if_email_exists=False
inform_if_email_invalid=False
email_required=True
max_length_username=128
max_length_email=128
password_allow_whitespace=True
always_return_confirm_token=True
is_email_required=True
is_approval_needed=True

[user_validation]
service=zato.sso.user.validate
reject_username=zato, admin, root, system, sso
reject_email=zato, admin, root, system, sso

[main]

main.encrypt_email

  • Une valeur booléenne indiquant si les emails dans la base de données SSO doivent être cryptés ou non. Si True, il ne sera pas possible de rechercher les utilisateurs par leurs emails. Si False, les emails des utilisateurs seront stockés en texte clair.

  • Par défaut: True

main.encrypt_password

  • Une valeur booléenne indiquant si les mots de passe dans la base de données SSO doivent être cryptés ou non. Le cryptage est une mesure supplémentaire qui s'ajoute au hachage des mots de passe qui a toujours lieu.

  • Par défaut: True

backend

backend.default

  • Quelle base de données utiliser pour stocker les informations. Dans la version actuelle, il est fixé à 'sql' et ne peut être modifié.

  • Par défaut: sql

sql

sql.name

  • Nom d'une connexion SQL sortante pour se connecter à la base de données SSO. Il doit être laissé vide si la propre base de données de Zato doit être utilisée.

  • Par défaut: (None)

hash_secret

hash_secret.rounds

  • Le nombre de tours de l'algorithme PBKDF2 à utiliser pour le hachage du mot de passe. Il doit être ajusté pour chaque environnement séparément.

  • Par défaut: 120000

hash_secret.salt_size

  • Combien d'octets (pas de bits) de données aléatoires à utiliser pour la création du sel dans le hachage du mot de passe.

  • Par défaut: 64

apps

apps.all

  • Une liste, séparée par des virgules, de tous les noms d'applications que le SSO doit connaître et qui peuvent être envoyés comme current_app dans les appels API.

  • Par défaut: (None)

apps.signup_allowed

  • Une liste séparée par des virgules de noms d'applications par lesquelles les utilisateurs peuvent s'inscrire. Les demandes d'inscription envoyées depuis d'autres applications seront rejetées.

  • Par défaut: (None)

apps.login_allowed

  • Une liste séparée par des virgules de noms d'applications à partir desquelles les utilisateurs peuvent se connecter. Les demandes de connexion envoyées depuis d'autres applications seront rejetées.

  • Par défaut: (None)

apps.login_metadata_allowed

  • Une liste séparée par des virgules de noms d'applications qui peuvent envoyer des métadonnées de connexion au SSO. Les demandes de connexion avec des métadonnées provenant d'autres applications seront rejetées.

  • Par défaut: (None)

apps.inform_if_app_invalid

  • Dans les appels d'API, si l'on doit utiliser un code d'erreur spécifique pour indiquer que l'entrée current_app n'existe pas dans un contexte donné ou si un code d'erreur générique doit être utilisé. Si True, le code spécifique sera retourné.

  • Par défaut: True

connexion

login.reject_if_not_listed

  • Si les tentatives de connexion doivent être rejetées si le nom d'utilisateur saisi ne figure pas explicitement dans le whitelist [user_address_list].

  • Par défaut: False

login.inform_if_locked

  • Si les informations d'identification sont correctes mais que le compte est verrouillé, il convient de renvoyer un code d'erreur spécifique ou un code générique pour indiquer ce fait.

  • Par défaut: True

login.inform_if_not_confirmed

  • Si les informations de connexion sont correctes mais que le compte n'a pas encore été confirmé par l'utilisateur, il convient de renvoyer un code d'erreur spécifique pour indiquer ce fait ou un code générique.

  • Par défaut: True

login.inform_if_not_approved

  • Si les informations de connexion sont correctes mais que le compte n'a pas encore été approuvé par un super-utilisateur, il convient de renvoyer un code d'erreur spécifique pour indiquer ce fait ou un code générique.

  • Par défaut: True

user_address_list

  • La strophe est un whitelist des noms d'utilisateurs autorisés et, éventuellement, des adresses distantes à partir desquelles ils peuvent se connecter.

  • Par défaut: (None)

session

session.expiry

  • La date d'expiration d'une session utilisateur, en minutes. Les sessions existantes sont prolongées de ce nombre de minutes à chaque interaction réussie avec les API de SSO.

  • Par défaut: 60

password

password.expiry

  • Après combien de jours un mot de passe nouvellement défini doit être considéré comme expiré. Les utilisateurs dont le mot de passe a expiré ne pourront pas se connecter jusqu'à ce que le mot de passe soit modifié. Les super-utilisateurs peuvent également changer et réinitialiser les mots de passe à partir de la ligne de commande.

  • Par défaut: 730

password.inform_if_expired

  • Si les informations d'identification sont correctes mais que le mot de passe a déjà expiré, il convient de renvoyer un code d'erreur spécifique pour indiquer ce fait ou un code générique.

  • Par défaut: False

password.inform_if_about_to_expire

  • Si les informations d'identification sont correctes mais que le mot de passe est sur le point d'expirer, il convient de renvoyer un code d'erreur spécifique pour indiquer ce fait ou un code générique.

  • Par défaut: True

password.inform_if_must_be_changed

  • Si les identifiants de connexion sont corrects mais que le mot de passe doit être modifié par l'utilisateur alors qu'un nouveau mot de passe n'a pas été envoyé, si un code d'erreur spécifique pour indiquer ce fait doit être retourné ou un code générique.

  • Par défaut: True

password.inform_if_invalid

  • Si le mot de passe que l'utilisateur essaie de définir n'est pas valide (par exemple, trop court ou trop long), il faut renvoyer un code d'erreur spécifique ou un code générique pour indiquer ce fait.

  • Par défaut: True

password.about_to_expire_threshold

  • Combien de jours avant l'expiration réelle le mot de passe doit être interprété comme étant sur le point d'expirer.

  • Par défaut: 30

password.log_in_if_about_to_expire

  • Si le mot de passe est sur le point d'expirer, si l'utilisateur doit être autorisé à se connecter malgré tout.

  • Par défaut: True

password.min_length

  • Longueur minimale du mot de passe en octets.

  • Par défaut: 8

password.max_length

  • Longueur maximale du mot de passe en octets.

  • Par défaut: 256

password.reject_list

  • Une liste de plusieurs lignes de chaînes de caractères qui ne sont pas autorisées dans les mots de passe, peu importe si elles sont utilisées comme préfixe, suffixe ou au milieu du mot de passe. Vérifié sans tenir compte de la casse.

  • Par défaut: (None)

signup

signup.inform_if_user_exists

  • Lorsque les utilisateurs s'inscrivent, doivent-ils être informés par un code spécifique que le nom d'utilisateur choisi existe déjà ou si un code d'erreur générique doit être retourné.

  • Par défaut: True

signup.inform_if_user_invalid

  • Lorsque les utilisateurs s'inscrivent, doivent-ils être informés par un code spécifique que le nom d'utilisateur choisi est invalide (par exemple, a des espaces) ou si un code d'erreur générique doit être retourné.

  • Par défaut: True

signup.inform_if_email_exists

  • Lorsque les utilisateurs s'inscrivent, doivent-ils être informés par un code spécifique que l'email choisi existe déjà ou si un code d'erreur générique doit être renvoyé.

  • Par défaut: True

signup.inform_if_email_invalid

  • Lorsque les utilisateurs s'inscrivent, doivent-ils être informés par un code spécifique que l'email choisi n'est pas valide (par exemple, a des espaces) ou si un code d'erreur générique doit être retourné.

  • Par défaut: True

signup.email_required

  • Si l'adresse électronique est un champ obligatoire lors de l'inscription.

  • Par défaut: True

signup.max_length_username

  • Par défaut: 128

signup.max_length_email

  • Par défaut: 128

signup.password_allow_whitespace

  • Par défaut: True

signup.always_return_confirm_token

  • Par défaut: True

signup.is_email_required

  • Par défaut: True

signup.is_approval_needed

  • Par défaut: True

user_validation

user_validation.service

  • Une liste de services, séparés par des virgules, pour valider les utilisateurs qui tentent de s'inscrire. Les services sont invoqués dans l'ordre défini dans cette entrée.

  • Par défaut : zato.sso.user.validate

user_validation.reject_username

  • Une liste de mots-clés séparés par des virgules qui ne doivent pas faire partie du nom d'utilisateur, sinon la demande d'inscription est rejetée.

  • Par défaut : zato, admin, root, system, sso

user_validation.reject_email

  • Une liste de mots-clés séparés par des virgules qui ne doivent pas faire partie de l'email, sinon la demande d'inscription est rejetée.

  • Par défaut : zato, admin, root, system, sso