# Sécurité

## Aperçu <a href="#apercu" id="apercu"></a>

Cette section décrit les différentes méthodes d'authentification des utilisateurs de WorkflowGen :

* [Microsoft Entra ID](https://docs.advantys.com/workflowgen-pour-azure/authentification-azure-active-directory), anciennement Azure Active Directory (compatible OIDC)<br>

* [AD FS 2016](https://docs.workflowgen.com/tech-fr/8.0/integration-ad-fs#authentification-ad-fs-2016) (compatible OIDC)

* [Auth0](https://docs.workflowgen.com/tech-fr/8.0/integration-auth0#authentification-auth0) (compatible OIDC)

* [Okta](https://docs.workflowgen.com/tech-fr/8.0/integration-okta#authentification-okta) (compatible OIDC)<br>

* [Microsoft Identity Platform v2.0](https://docs.advantys.com/workflowgen-pour-azure/authentification-azure-active-directory) (compatible OIDC)

* [Authentification Windows intégrée](#authentification-windows-integree) (assurée par IIS)<br>

* [Authentification HTTP IIS de base](#authentification-http-iis-de-base) (assurée par IIS)<br>

* [Authentification HTTP WorkflowGen de base](#authentification-http-workflowgen-de-base) (assurée par HttpModule)<br>

* [Authentification HTTP personnalisée de base](#authentification-http-personnalisee-de-base) (assurée par HttpModule)<br>

* [Authentification par formulaires](#authentification-par-formulaires) (assurée par .NET)

Choisissez l’une d’elles selon vos exigences et appliquez les paramètres requis pour l’implémenter avec votre instance WorkflowGen.

## Méthodes d'authentification <a href="#methodes-authentification" id="methodes-authentification"></a>

Les applications serveur et mobiles WorkflowGen peuvent être configurées pour utiliser les méthodes d'authentification compatibles OIDC ou les méthodes classiques non compatibles OIDC. La matrice ci-dessous indique les méthodes d'authentification supportées par les différentes applications WorkflowGen :

|                                                 | OIDC | HTTP IIS de base | IIS Windows intégrée | HTTP WorkflowGen de base | HTTP personnalisée de base | Par formulaires |
| ----------------------------------------------- | :--: | :--------------: | :------------------: | :----------------------: | :------------------------: | :-------------: |
| WorkflowGen v7.x.x                              |  ✔️  |        ✔️        |          ✔️          |            ✔️            |             ✔️             |        ✔️       |
| WorkflowGen Plus v1.x.x (iOS)                   | ✔️\* |        ✔️        |          ✔️          |            ✔️            |             ✔️             |        ❌        |
| WorkflowGen Plus v1.x.x (Android)               | ✔️\* |        ✔️        |          ✔️          |            ✔️            |             ✔️             |        ❌        |
| WorkflowGen app mobile héritée v2.x.x (iOS)     |   ❌  |        ✔️        |          ✔️          |            ✔️            |             ✔️             |        ❌        |
| WorkflowGen app mobile héritée v2.x.x (Android) |   ❌  |        ✔️        |           ❌          |            ✔️            |             ✔️             |        ❌        |

\* Sauf Microsoft Identity Platform v2.0.

### Méthodes d'authentification compatibles OIDC

WorkflowGen peut être configuré pour utiliser les méthodes d'authentification [Microsoft Entra ID](https://docs.advantys.com/workflowgen-pour-azure/authentification-azure-active-directory) (anciennement Azure Active Directory), [AD FS 2016](https://docs.workflowgen.com/tech-fr/8.0/integration-ad-fs#authentification-ad-fs-2016), [Auth0](https://docs.workflowgen.com/tech-fr/8.0/integration-auth0#authentification-auth0), [Okta](https://docs.workflowgen.com/tech-fr/8.0/integration-okta#authentification-okta) et [Microsoft Identity Platform v2.0](https://docs.advantys.com/workflowgen-pour-azure/authentification-azure-active-directory) compatibles OpenID Connect (OIDC). L'application mobile WorkflowGen Plus supporte les méthodes Microsoft Entra ID, AD FS 2016, Auth0 et Okta.

{% hint style="warning" %}
L'application mobile WorkflowGen héritée ne supporte pas les méthodes d'authentification compatibles OIDC.
{% endhint %}

### Méthodes d'authentification classiques

Voir ci-dessous pour les instructions sur comment configurer les méthodes d'authentification classiques (non compatibles OIDC) [Windows intégrée](#authentification-windows-integree), [HTTP IIS de base](#authentification-http-iis-de-base), [HTTP WorkflowGen de base](#authentification-http-workflowgen-de-base), [HTTP personnalisée de base](#authentification-http-personnalisee-de-base) et [par formulaires](#authentification-par-formulaires).

**Quelle méthode d’authentification classique choisir ?**

Si vous ne savez pas quelle méthode d'authentification classique choisir, suivez les procédures ci-dessous en fonction de votre situation :

1. Si tous les utilisateurs de WorkflowGen sont gérés dans un annuaire Active Directory, et que cet annuaire peut être atteint à partir du serveur Web qui héberge WorkflowGen, vous pouvez donc choisir l'une des méthodes d'authentification suivantes :
   * Authentification Windows intégrée (assurée par IIS)
   * Authentification HTTP IIS de base (assurée par IIS)<br>
2. Si l’article 1 ci-dessus correspond à votre situation et que vous voulez assurer une authentification transparente en utilisant la session Windows courante des utilisateurs, vous pouvez donc choisir la méthode d'authentification suivante :
   * Authentification Windows intégrée (assurée par IIS)<br>
3. Si l’article 1 ci-dessus ne correspond pas à votre situation, et que tous les utilisateurs de WorkflowGen sont gérés dans une application externe telle qu'une base de données ou authentifiés par une solution SSO, vous pouvez donc choisir l'une des méthodes d'authentification suivantes :
   * Authentification HTTP personnalisée de base (assurée par HttpModule)
   * Authentification par formulaires (assurée par .NET)<br>
4. Si ni l’article 1 ni l’article 3 ne correspondent à votre situation parce que vous ne disposez d'aucun annuaire ou d'aucune autres solutions d'authentification, le seul choix de méthode d'authentification est la suivante :

   * Authentification HTTP WorkflowGen de base (assurée par HttpModule)

   \
   ✏️ **Note :** Pour tous les méthodes d'authentification HTTP de base et par formulaires, nous vous recommandons fortement d'utiliser SSL du fait que les mots de passe ne sont pas encryptés.

### Authentification Windows intégrée <a href="#authentification-windows-integree" id="authentification-windows-integree"></a>

**Paramètres IIS et WorkflowGen**

1. Ouvrez le panneau de configuration de WorkflowGen. Sous **Authentification** dans l’onglet **Général**, sélectionnez le mode **IIS**.<br>
2. Activez l’accès à l’authentification Windows intégrée sur le site Web de WorkflowGen et désactivez tous les mécanismes d'accès embarqués. Appliquez ce paramétrage à toutes les sous-applications **sauf** les applications `graphql` et `ws`.

### Authentification HTTP IIS de base

**Paramètres IIS et WorkflowGen**

1. Activez l'accès à l'authentification de base sur le site Web de WorkflowGen et désactivez tous les mécanismes d'accès embarqués. Appliquez ce paramétrage à toutes les sous-applications.<br>
2. Ouvrez le panneau de configuration de WorkflowGen. Sous **Authentification** dans l’onglet **Général**, sélectionnez le mode **IIS**.

### Authentification HTTP WorkflowGen de base

**Paramètres IIS et WorkflowGen**

1. Pour utiliser l'authentification WorkflowGen, assurez-vous que l'option de gestion des mots de passe par WorkflowGen est sélectionnée pour tous les répertoires, qui vous permettra de configurer un mot de passe par utilisateur. Assurez-vous que votre utilisateur courant a un mot de passe WorkflowGen associé, sinon le compte sera verrouillé.<br>
2. Ouvrez le **Panneau de configuration** de WorkflowGen et changez les paramètres sous **Authentification** dans l'onglet **Général** comme suit :<br>
   1. Sélectionnez le mode **WorkflowGen**.<br>
   2. Entrez le nom d’utilisateur et le mot de passe du compte système associé.<br>
   3. Choisissez le mode de gestion des mots de passe : le mode **Version 5** utilise le même mode de gestion des mots de passe que les versions antérieures de WorkflowGen, tandis que le mode **One-way Hashing** (hachage à sens unique) stocke les mots de passe cryptés dans la base de données de WorkflowGen et **One-way Hashing (SHA256 FIPS compliant)** (hachage à sense unique compatible FIPS) stocke les mots passe cryptés dans la base de données de WorkflowGen et est compatible FIPS.<br>
   4. Entrez le nombre maximum de tentatives de connexion infructueuses avant que le compte d’utilisateur ne soit verrouillé.<br>
   5. Entrez la longueur minimum (en caractères) du mot de passe.<br>
3. Activez l'accès anonyme sur le site Web de WorkflowGen et désactivez tous les mécanismes d'accès embarqués. Appliquez ce paramétrage à toutes les sous-applications.<br>
4. Les fichiers `Advantys.My.dl`l et `Advantys.Security.dll` doivent être copiés dans tous les répertoires `\bin` des applications sous WorkflowGen, telles que EFORMASPX, ainsi que dans tous les dossiers `WebForm` et `WebApps`. Les services Web doivent continuer à utiliser l'authentification de base ou intégrée.<br>
5. En option, vous pouvez activer le lien de déconnexion de l'utilisateur dans les menus du portail utilisateur et du module d'administration en définissant un délai d'expiration de la session d'application dans le fichier `web.config`. La session de l'utilisateur expirera en cas d'inactivité après une période (en minutes) spécifiée par la valeur du paramètre de configuration `ApplicationSessionTimeOut`.<br>

   Par exemple, pour que la session de l'utilisateur expire après 30 minutes d'inactivité, modifiez le paramètre comme suit : `<add key="ApplicationSessionTimeOut" value="30" />`.

{% hint style="info" %}
Si vous utilisez IIS 8 ou supérieur avec un groupe d’applications en mode **Classic Managed Pipeline**, le suivant sera ajouté au `web.config` :

```markup
<configuration>
    <system.web>
        <httpModules>
            <add name="ApplicationSecurityAuthenticationModule" type="Advantys.Security.Http.AuthenticationModule" />
        </httpModules>
    </system.web>
</configuration>
```

Si vous utilisez IIS 8 ou supérieur avec un groupe d’applications en mode **Integrated Managed Pipeline**, le suivant sera ajouté au `web.config` :

```markup
 <configuration>
     <system.webServer>
         <modules>
             <add name="ApplicationSecurityAuthenticationModule" type="Advantys.Security.Http.AuthenticationModule" />
         </modules>
     </system.webServer>
 </configuration>
```

{% endhint %}

### Authentification HTTP personnalisée de base <a href="#authentification-http-personnalisee-de-base" id="authentification-http-personnalisee-de-base"></a>

**Paramètres IIS et WorkflowGen**

1. Au moyen de l’exemple de code donné dans la section [Exemple de code pour un module HTTP](https://docs.workflowgen.com/tech-fr/8.0/exemple-de-code-pour-un-module-http) créez une nouvelle classe pour le HttpModule que vous créez.<br>
2. Modifiez l'exemple de code pour valider les justificatifs d’identité utilisés pour HTTP de base selon le référentiel de configuration externe.<br>
3. Élaborez le module et copiez le fichier DLL d’assembly dans les répertoires `\wfgen\bin` et `\wfgen\wfapps\webforms\bin`.<br>
4. Le fichier DLL d’assembly doit être copié dans tous les répertoires `\bin` de vos formulaires Web. Vos services Web peuvent utiliser l’authentification de base ou intégrée, ou votre module HTTP personnalisé.<br>
5. Ouvrez le **Panneau de configuration** de WorkflowGen et changez les paramètres sous **Authentification** comme suit :<br>
   1. Sélectionnez le mode **Applicatif**.<br>
   2. Sélectionnez la méthode **Custom**.<br>
   3. Saisissez le nom complet de l'assembly (espace de noms et nom de classe) du module HTTP (p.ex. `MyCompany.Hosting.Samples.CustomAuthModule`).<br>
6. Activez l'accès anonyme sur le site Web de WorkflowGen et désactivez tous les mécanismes d'accès embarqués. Appliquez ce paramétrage à toutes les sous-applications.

{% hint style="info" %}
Si vous utilisez IIS 8 ou supérieur avec un groupe d’applications en mode **Classic Managed Pipeline**, le suivant sera ajouté au `web.config` :

```markup
<configuration>
    <system.web>
        <httpModules>
            <add name="ApplicationSecurityAuthenticationModule" type="MyCompany.Hosting.Samples.CustomAuthModule" />
        </httpModules>
    </system.web>
</configuration>
```

Si vous utilisez IIS 8 ou supérieur avec un groupe d’applications en mode Integrated Managed Pipeline, le suivant sera ajouté au `web.config` :

```markup
 <configuration>
     <system.webServer>
         <modules>
             <add name="ApplicationSecurityAuthenticationModule" type="MyCompany.Hosting.Samples.CustomAuthModule" />
         </modules>
     </system.webServer>
 </configuration>
```

{% endhint %}

### Authentification par formulaires

**Paramètres IIS et WorkflowGen**

1. Modifiez le code de `login.aspx` pour valider les justificatifs d'identité utilisés pour HTTP de base selon le référentiel de configuration externe. Si vous ne disposez pas d'un référentiel de configuration externe, vous pouvez ajouter des utilisateurs directement dans le `web.config` de WorkflowGen (veuillez consulter la documentation .NET).<br>
2. Le fichier `login.aspx` doit être copié dans tous les répertoires WebForms. Les services Web doivent continuer à utiliser l'authentification de base ou intégrée; ainsi, la page `login.aspx` ne peut être utilisée pour celles-ci.<br>
3. Dans le `web.config` de WorkflowGen, enregistrez le formulaire d'authentification :

   ```markup
   <configuration>
       <system.web>
           <authentication mode="Forms">
               <forms name="401kApp" timeout="30" loginUrl="/wfgen/login.aspx" cookieless="AutoDetect" defaultUrl="/wfgen/default.aspx" protection="None" />
           </authentication>
           <authorization>
               <deny users="?" />
           </authorization>
       </system.web>
   </configuration>
   ```

   ✏️ **Note :** Dans le `web.config` de WorkflowGen, configurez la protection d'attributs à `None` ou protection à `All` au nœud `forms`. Si `All` est utilisé, l'attribut et la valeur `machineKey` doivent être ajoutés aussi. (Pour plus d’informations sur l’authentification par formulaire, voir <http://quickstarts.asp.net/QuickStartv20/aspnet/doc/security/formsauth.aspx>.<br>
4. Définissez l'authentification à Windows pour chaque application WebService de WorkflowGen dans le fichier `web.config` et remettez les paramètres de sécurité à **Basic** ou **Integrated** dans IIS pour ces dossiers.<br>
5. Activez l'accès anonyme sur le site Web de WorkflowGen et désactivez tous les mécanismes d'accès embarqués. Appliquez ce paramétrage à toutes les sous-applications.

## Conformité FIPS <a href="#conformite-fips" id="conformite-fips"></a>

À partir de la version 7.10.0, WorkflowGen est conforme FIPS et compatible avec le mode Windows conforme FIPS. Si vous souhaitez activer la conformité FIPS dans votre environnement Windows, vous devez configurer au préalable les modes de gestion des mots de passe de la configuration et de gestion des mots de passe utilisateur.

### Mode de gestion des mots de passe de la configuration

Dans la section **Sécurité** de l'onglet **Général** du panneau de configuration, définissez **Mode de gestion des mots de passe de la configuration** sur **AES (FIPS compliant)** et saisissez une clé de chiffrement à 32 caractères. Lorsque vous cliquez sur **Enregistrer**, les mots de passe des applications sont automatiquement convertis dans le nouveau mode de cryptage symétrique.

### Mode de gestion des mots de passe utilisateur

Dans la section **Authentification** de l'onglet **Général** du panneau de configuration, définissez **Mode de gestion des mots de passe** sur le mode **One-way Hashing (SHA256 FIPS compliant)**.

* Si vous utilisez l'authentification applicative en mode de gestion des mots de passe **Version 5**, les mots de passe des utilisateurs seront automatiquement convertis en mode **One-way Hashing (SHA256 FIPS compliant)** la prochaine fois qu'ils se connecteront à WorkflowGen.<br>
* Si vous utilisez l'authentification applicative en mode de gestion des passe **One-way Hashing (SHA256 FIPS compliant)** :<br>
  1. Sélectionnez le mode d'authentification **IIS**.<br>
  2. Sélectionnez le mode de gestion des mots de passe **One-way Hashing (SHA256 FIPS compliant)**, puis cliquez sur **Enregistrer**.<br>
  3. Saisissez à nouveau tous les mots de passe utilisateur.<br>
  4. Réinitialisez le mode d'authentification sur applicatif.

## HTTPS : Utilisation de SSL avec WorkflowGen <a href="#https-utilisation-ssl-avec-workflowgen" id="https-utilisation-ssl-avec-workflowgen"></a>

### Aperçu

Cette section décrit comment configurer WorkflowGen pour utiliser un niveau de connexion de sécurité SSL sur le site Web.

### Configuration de IIS

Activez l’authentification SSL sur votre site WorkflowGen.

### Paramètres de l’application à modifier

Vous devez modifier les paramètres suivants dans la configuration de WorkflowGen (ouvrez le **Panneau de configuration** depuis le module d’administration de WorkflowGen).

* **URL de l’application** : vous devez modifier le protocole de l’application afin d’utiliser `https://`

### Liens vers WorkflowGen

Changez les liens vers WorkflowGen (favoris, etc...) avec `https://` à la place de `http://`.

## Partage des ressources cross-origin (CORS)

Pour permettre à une application cliente (telle que du code JavaScript frontal d'un domaine extérieur) d'accéder et de demander des données, vous devez activer et configurer les paramètres de [partage des ressources cross-origin](https://developer.mozilla.org/fr/docs/Web/HTTP/CORS) (CORS). Pour ce faire :&#x20;

1. Installez le [module IIS CORS](https://www.iis.net/downloads/microsoft/iis-cors-module) sur le serveur Web WorkflowGen.<br>
2. Ajoutez le nœud `cors` avec la liste des domaines externes et leurs méthodes et en-têtes (où les requêtes HTTP seront autorisées) aux paramètres de configuration Web de WorkflowGen (situés dans `\wfgen\web.config`). Voir quelques exemples courants ci-dessous.

📌 **Exemple 1 : Autoriser toutes les origines**

```markup
<configuration>
    <system.webServer>
        <cors enabled="true">
            <add origin="*">
                <allowMethods>
                    <add method="GET" />
                    <add method="POST" />
                    <add method="OPTIONS" />
                    <add method="HEAD" />
                </allowMethods>
                <allowHeaders>
                    <add header="Accept" />
                    <add header="Origin" />
                    <add header="Authorization" />
                    <add header="Content-Type" />
                </allowHeaders>
            </add>
        </cors>
    </system.webServer>
</configuration>
```

📌 **Exemple 2 : Autoriser des origines spécifiques**

```markup
<configuration>
    <system.webServer>
        <cors enabled="true">
            <add origin="https://domain.b.com" allowCredentials="true">
                <allowMethods>
                    <add method="GET" />
                    <add method="POST" />
                    <add method="OPTIONS" />
                    <add method="HEAD" />
                </allowMethods>
                <allowHeaders>
                    <add header="Accept" />
                    <add header="Origin" />
                    <add header="Authorization" />
                    <add header="Content-Type" />
                </allowHeaders>
            </add>
            <add origin="https://domain.c.com" allowCredentials="true">
                <allowMethods>
                    <add method="GET" />
                    <add method="POST" />
                    <add method="OPTIONS" />
                    <add method="HEAD" />
                </allowMethods>
                <allowHeaders>
                    <add header="Accept" />
                    <add header="Origin" />
                    <add header="Authorization" />
                    <add header="Content-Type" />
                </allowHeaders>
            </add>
        </cors>
    </system.webServer>
</configuration>
```

Pour plus d'informations sur la configuration CORS, voir la page [IIS CORS module Configuration Reference](https://docs.microsoft.com/en-us/iis/extensions/cors-module/cors-module-configuration-reference) (disponible en anglais uniquement).
