Aller au contenu

Authentification Tock Studio

Systèmes d'authentification

Tock supporte plusieurs systèmes d'authentification pour l'interface d'administration. Il utilise les librairies vert.x correspondantes.

Voici les systèmes disponibles par défaut (tous implémentations de TockAuthProvider) :

Il est également possible d'intégrer une authentification CAS (SSO), dans le cas d'une installation de type entreprise. Ce modèle nécessite d'hériter d'un modèle de base, mais permet de faire correspondre un profil utilisateur selon vos propres contraintes et spécificités.

Des détails et exemples de configuration sont donnés plus bas dans cette page.

Si ces modèles ne correspondent pas à votre besoin, il est relativement simple d'en développer d'autres en se basant sur les exemples ci-dessus. N'hésitez pas à contribuer au projet et à nous contacter pour toute question!

Les rôles qui peuvent être donnés aux utilisateurs sont décrits dans Sécurité.

Implémentation par propriétés

La configuration par "propriétés" est utilisée par défaut. Elle ne dépend d'aucun système tiers pour fonctionner.

Ce mode consiste a configurer utilisateurs et rôles par des propriétés ou variables d'environnement. Selon le mode de déploiement utilisé, ces variables peuvent être définies soit directement en ligne de commande, soit dans un descripteur type docker-compose.yml, dockerrun.aws.json ou autre.

Si aucune variable n'est définie (par exemple dans les descripteurs fournis dans le dépôt tock-docker), des valeurs par défaut sont utilisées.

Voici les propriétés et leurs valeurs par défaut :

Variable d'environnement Valeur par défaut Description
tock_users admin@app.com Identifiants (séparés par des virgules).
tock_passwords password Mots de passe (séparés par des virgules).
tock_organizations app Organisations (séparées par des virgules).
tock_roles Vide (i.e., tous les rôles) Rôles séparés par des | (puis par des virgules).

Pour définir l'identité et les rôles de plusieurs utilisateurs, on sépare les valeurs par des virgules.

Attention : chacune de ces propriétés doit posséder le même nombre de valeurs (et dans le même ordre) pour permettre de corréler ces valeurs (index par index, pour chaque utilisateur).

Ci-dessous un exemple au format Docker-Compose :

services:
  admin_web:
    environment:
      - tock_users=alice@tock.ai,bob@tock.ai
      - tock_passwords=secret1,secret2
      - tock_organizations=tock,tock
      - tock_roles=botUser,nlpUser|botUser|admin|technicalAdmin

Dans cet exemple, Alice a le rôle botUser, alors que Bob a tous les rôles.

Pour en savoir plus sur le fonctionnement précis de cette implémentation, voir la classe PropertyBasedAuthProvider.

Implémentation OAuth2 générique

Cette implémentation générique est à utiliser dès que vous souhaitez paramétrer une configuration OAuth2.

Voici les propriétés, avec des exemples de valeurs :

Variable d'environnement Exemple de valeur Description
tock_oauth2_enabled true Activation de l'authentification OAuth2
tock_oauth2_client_id CLIENT_ID Identifiant de l'application chez le fournisseur OAuth2
tock_oauth2_secret_key SECRET_KEY Secret de l'application chez le fournisseur OAuth2
tock_oauth2_site_url https://provider URL du provider OAuth2
tock_oauth2_access_token_path /oauth2/token Chemin relatif pour récupérer l'access token
tock_oauth2_authorize_path /oauth2/authorize Chemin relatif pour récupérer l'authorize
tock_oauth2_userinfo_path /oauth2/userInfo Chemin relatif pour récupérer les userinfo
tock_oauth2_proxy_host Hôte du proxy (ne pas indiquer si pas de proxy)
tock_oauth2_proxy_port Port optionnel du proxy
tock_oauth2_user_role_attribute custom:roles Attribut lu dans le token pour le mapping du rôle
tock_custom_roles_mapping Lien entre les profils OAuth et les rôles Tock
tock_custom_namespace_mapping Lien entre les profils OAuth et les namespaces Tock
tock_bot_admin_rest_default_base_url http://localhost:8080 Redirection vers l'URL de Tock Studio si besoin

Il est nécessaire d'indiquer en callback url https://[host admin]/rest/callback.

Implémentation OAuth2 pour Keycloak

Cette implémentation OAuth2 Keycloak est à utiliser dès que vous souhaitez paramétrer une configuration OAuth2 avec Keycloak.

Voici les propriétés et leurs valeurs proposées :

Attention, par défaut, aucun adapteur n'étant activé, il faut impérativement mettre la clé tock_keycloak_enabled correspondant à notre adaptateur à true.

Variable d'environnement Exemple de valeur Description
tock_keycloak_enabled true Activation de l'authentification OAuth2
tock_keycloak_client_id CLIENT_ID Client id crée sur Keycloak
tock_keycloak_secret_key SECRET_KEY Secret key générée par Keycloak
tock_keycloak_site_url https://keycloak/realms/myrealm Url du Realm Keycloak
tock_keycloak_access_token_path /protocol/openid-connect/token Chemin relatif pour récupérer l'access token
tock_keycloak_authorize_path /protocol/openid-connect/auth Chemin relatif pour l'authorize
tock_keycloak_userinfo_path /protocol/openid-connect/userinfo Chemin relatif pour les userinfo
tock_keycloak_proxy_host host du proxy (ne pas indiquer si pas de proxy)
tock_keycloak_proxy_port port optionnel du proxy
tock_custom_namespace_mapping tock_namespace Attribut lu dans le token pour le namespace
tock_keycloak_user_role_attribute tock_roles Attribut lu dans le token pour les roles

Il est nécessaire d'indiquer en callback url https://[host admin]/rest/callback.

Une configuration basique nécessite de définir tock_keycloak_client_id et tock_keycloak_secret_key avec les valeurs correspondantes sur Keycloak.

Il est également nécessaire de passer l'adresse du Realm keycloak via tock_keycloak_site_url.

Il n'est en revanche alors pas nécessaire de définir tock_keycloak_access_token_path, tock_keycloak_authorize_path et tock_keycloak_userinfo_path puisque les valeurs par défaut conviennent pour Keycloak si l'on spécifie bien l'adresse du realm.

Si tock_custom_namespace_mapping n'est pas défini ou si l'attribut n'est pas trouvé, le namespace "app" par défaut est utilisé.

Implémentation OAuth/GitHub

Cette implémentation assez simpliste est utilisée à titre d'exemple, ainsi que pour la plateforme publique de démo https://demo.tock.ai.

Elle consiste à interroger l'API GitHub pour vérifier l'identité d'un utilisateur à partir de son jeton (access_token).

Remarque : aucune autre donnée du profil GitHub n'est accédée par Tock, à part l'identifiant.

Dans ce mode, activé par la propriété tock_github_oauth_enabled, chaque utilisateur reçoit automatiquement tous les rôles Tock Studio et une organisation (ie. namespace) du même nom que son identifiant.

Voici les propriétés et leurs valeurs par défaut :

Variable d'environnement Valeur par défaut Description
tock_github_oauth_enabled false Activation de l'authentification OAuth/GitHub.
tock_github_oauth_client_id CLIENT_ID Identifiant pour interroger l'API GitHub.
tock_github_oauth_secret_key SECRET_KEY Mot de passe pour interroger l'API GitHub.
tock_github_api_request_timeout_ms 5000 Timeout vérification de l'identité (API GitHub).

Pour en savoir plus sur le fonctionnement précis de cette implémentation, voir la classe GithubOAuthProvider.

Implémentation SSO/CAS

Cette implémentation a pour vocation de servir de pont entre un environnement entreprise et Tock. Elle est donc en partie spécifique à chaque entreprise, dans la mesure ou il est nécessaire de faire correspondre un profil utilisateur vers des groupes et rôles Tock.

Elle est composée de :

  • Une implémentation du mécanisme d'authentification CAS intégrée à Tock ( basée sur 'PAC4J' )
  • Votre module externalisé qui va hériter de cette implémentation, avec une (re)définition des rôles/groupes selon le profil utilisateur

L'authentification CAS est spécifique à l'entreprise, et nécessite un module dédié externe à développer pour Tock

Example de module CAS: 'samples/tock-sample-cas-auth-provider'

Voici les propriétés et leurs valeurs par défaut :

Variable d'environnement Valeur par défaut Description
tock_cas_auth_enabled false Activation de l'authentification PAC4J/CAS.
tock_cas_auth_proxy_host 127.0.0.1 Host du proxy (ne pas indiquer si pas de proxy)
tock_cas_auth_proxy_port 3128 Port optionnel du proxy
tock_cas_join_same_namespace_per_user true Lors de la création de l'utilisateur, si le namespace existe déjà et que d'autres utilisateurs sont déjà présent, le nouvel utilisateur rejoint le même namespace existant

Pour en savoir plus sur le fonctionnement précis de cette implémentation, voir la classe CASAuthProvider.

Note complémentaire:

Lorsque l'authentification est de type SSO le bouton de Logout n'est pas disponible

Chat with Tock
×