# Authentification SAML v2.0

## Aperçu

SAML v2.0 fournit une authentification fédérée de niveau entreprise avec suivi des identifiants de requête pour la sécurité. Il permet à WorkflowGen de déléguer l’authentification à des systèmes de fournisseurs d’identité (IdP), afin que les utilisateurs puissent accéder à l’application avec leurs identifiants corporatifs existants.

## Configuration

{% hint style="info" %}
Voir la section [Paramétrages de configuration OIDC](#parametrages-de-configuration-oidc) ci-dessous pour un tableau répertoriant tous les paramétrages obligatoires et facultatifs, accompagnés de leur description et de leur valeur par défaut.
{% endhint %}

### Microsoft Entra ID

**Fournisseur :** `saml-azure`

#### Paramétrages requis

```html
<add key="ApplicationSecurityAuthProvider" value="saml-azure" />
<add key="ApplicationSecurityAuthSAMLEntryPoint" value="https://login.microsoftonline.com/{tenant-id}/saml2" />
<add key="ApplicationSecurityAuthSAMLIssuer" value="https://{your-workflowgen-domain}/wfgen/auth" />
<add key="ApplicationSecurityAuthSAMLIdpIssuer" value="https://sts.windows.net/{tenant-id}/" />
<add key="ApplicationSecurityAuthSAMLCert" value="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----" />
<add key="ApplicationSecurityAuthSAMLPrivateKey" value="-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----" />
<add key="ApplicationSecurityAuthSAMLIdpCert" value="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----" />
<add key="ApplicationSecurityAuthSessionTokenSigningSecret" value="your-session-secret" />
```

#### Paramétrages facultatifs

**Déconnexion complète via le portail**

```html
<add key="ApplicationSecurityAuthSAMLLogoutPortalUrl" value="https://myapps.microsoft.com/logout" />
```

**Déconnexion initiée par le fournisseur de services (SP)**

```html
<add key="ApplicationSecurityAuthSAMLLogoutUrl" value="https://login.microsoftonline.com/{tenant-id}/saml2" />
```

{% hint style="info" %}
Si `ApplicationSecurityAuthSAMLLogoutUrl` ne se comporte pas comme prévu avec la configuration de votre locataire ou de votre navigateur, supprimez ce paramètre (laissez-le non défini) et utilisez plutôt la déconnexion de WorkflowGen uniquement ou la déconnexion du portail via : <https://myapps.microsoft.com/logout>.
{% endhint %}

### PingFederate

**Fournisseur** : `saml-pingfederate`

#### Paramétrages requis

```html
<add key="ApplicationSecurityAuthProvider" value="saml-pingfederate" />
<add key="ApplicationSecurityAuthSAMLEntryPoint" value="https://auth.pingone.ca/{environment-id}/saml20/idp/sso" />
<add key="ApplicationSecurityAuthSAMLIssuer" value="https://{your-workflowgen-domain}/wfgen/auth" />
<add key="ApplicationSecurityAuthSAMLIdpIssuer" value="https://auth.pingone.ca/{environment-id}" />
<add key="ApplicationSecurityAuthSAMLCert" value="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----" />
<add key="ApplicationSecurityAuthSAMLPrivateKey" value="-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----" />
<add key="ApplicationSecurityAuthSAMLIdpCert" value="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----" />
<add key="ApplicationSecurityAuthSessionTokenSigningSecret" value="your-session-secret" />
<!-- PingFederate wants logout requests to be signed - required for PingFederate SLO -->
<add key="ApplicationSecurityAuthSAMLWantLogoutRequestsSigned" value="true" />
<!-- PingFederate wants assertions to be signed - required for PingFederate SLO -->
<add key="ApplicationSecurityAuthSAMLWantAssertionsSigned" value="true" />
```

#### Paramétrages facultatifs

**Déconnexion complète via le portail**

```html
<add key="ApplicationSecurityAuthSAMLLogoutPortalUrl" value="https://auth.pingone.ca/{environment-id}/saml20/idp/slo" />
```

**Déconnexion initiée par le fournisseur de services (SP)**

```html
<add key="ApplicationSecurityAuthSAMLLogoutUrl" value="https://auth.pingone.ca/{environment-id}/saml20/idp/slo" />
```

### Auth0

**Fournisseur :** `saml-auth0`

#### Paramétrages requis

```html
<add key="ApplicationSecurityAuthProvider" value="saml-auth0" />
<add key="ApplicationSecurityAuthSAMLEntryPoint" value="https://{tenant-id}.auth0.com/samlp/{client-id}" />
<add key="ApplicationSecurityAuthSAMLIssuer" value="https://{your-workflowgen-domain}/wfgen/auth" />
<add key="ApplicationSecurityAuthSAMLIdpIssuer" value="urn:{tenant-id}.auth0.com" />
<add key="ApplicationSecurityAuthSAMLCert" value="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----" />
<add key="ApplicationSecurityAuthSAMLPrivateKey" value="-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----" />
<add key="ApplicationSecurityAuthSAMLIdpCert" value="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----" />
<add key="ApplicationSecurityAuthSessionTokenSigningSecret" value="your-session-secret" />
<!-- Auth0 wants assertions to be signed - required for Auth0 SLO -->
<add key="ApplicationSecurityAuthSAMLWantAssertionsSigned" value="true" />
```

#### Paramétrages facultatifs

**Déconnexion complète via le portail**

```html
<add key="ApplicationSecurityAuthSAMLLogoutPortalUrl" value="https://{tenant-id}.auth0.com/logout" />
```

**Déconnexion initiée par le fournisseur de services (SP)**

```html
<add key="ApplicationSecurityAuthSAMLLogoutUrl" value="https://{tenant-id}.auth0.com/samlp/{client-id}/logout" />
```

### Okta

**Fournisseur :** `okta-saml`

#### Paramétrages requis

```html
<add key="ApplicationSecurityAuthProvider" value="saml-okta" />
<add key="ApplicationSecurityAuthSAMLEntryPoint" value="https://{okta-domain-id}.okta.com/app/{app-name}/{app-id}/sso/saml" />
<add key="ApplicationSecurityAuthSAMLIssuer" value="https://{your-workflowgen-domain}/wfgen/auth" />
<add key="ApplicationSecurityAuthSAMLIdpIssuer" value="https://www.okta.com/{app-id}" />
<add key="ApplicationSecurityAuthSAMLCert" value="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----" />
<add key="ApplicationSecurityAuthSAMLPrivateKey" value="-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----" />
<add key="ApplicationSecurityAuthSAMLIdpCert" value="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----" />
<add key="ApplicationSecurityAuthSessionTokenSigningSecret" value="your-session-secret" />
```

#### Paramtérages facultatifs

**Déconnexion complète via le portail**

```html
<add key="ApplicationSecurityAuthSAMLLogoutPortalUrl" value="https://{okta-domain-id}.okta.com/login/signout" />
```

**Déconnexion initiée par le fournisseur de services (SP)**

```html
<add key="ApplicationSecurityAuthSAMLLogoutUrl" value="https://{okta-domain-id}.okta.com/app/{app-name}/{app-id}/slo/saml" />
```

{% hint style="info" %}
Si `ApplicationSecurityAuthSAMLLogoutUrl` ne fonctionne pas comme prévu (par exemple, si Okta renvoie `RequestDenied/AuthnFailed`), laissez ce paramètre non défini et utilisez la déconnexion via le portail utilisateur à l’adresse `/wfgen/auth/logout?logoutType=complete`.
{% endhint %}

### AD FS

{% hint style="warning" %}
Le support de SAML v2.0 pour AD FS est encore en mode expérimental. Vous devez tester la configuration afin de vérifier sa compatibilité.
{% endhint %}

**Fournisseur :** `saml-adfs`

#### Paramétrages requis

```html
<add key="ApplicationSecurityAuthProvider" value="saml-adfs" />
<add key="ApplicationSecurityAuthSAMLEntryPoint" value="https://{your-adfs-server}/adfs/ls/" />
<add key="ApplicationSecurityAuthSAMLIssuer" value="https://{your-workflowgen-domain}/wfgen/auth" />
<add key="ApplicationSecurityAuthSAMLIdpIssuer" value="https://{your-adfs-server}/adfs/services/trust" />
<add key="ApplicationSecurityAuthSAMLCert" value="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----" />
<add key="ApplicationSecurityAuthSAMLPrivateKey" value="-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----" />
<add key="ApplicationSecurityAuthSAMLIdpCert" value="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----" />
<add key="ApplicationSecurityAuthSessionTokenSigningSecret" value="your-session-secret" />
```

#### Paramétrages facultatifs

**Déconnexion complète via le portail**

```html
<add key="ApplicationSecurityAuthSAMLLogoutPortalUrl" value="https://{your-adfs-server}/adfs/ls/?wa=wsignout1.0" />
```

**Déconnexion initiée par le fournisseur de services (SP)**

```html
<add key="ApplicationSecurityAuthSAMLLogoutUrl" value="https://{your-adfs-server}/adfs/ls/?wa=wsignout1.0" />
```

### Fournisseurs génériques

{% hint style="warning" %}
Le support de SAML v2.0 pour les fournisseurs génériques est encore en mode expérimental. Vous devez tester la configuration afin de vérifier sa compatibilité.
{% endhint %}

**Fournisseur :** `saml-generic`

#### Paramétrages requis

```html
<add key="ApplicationSecurityAuthProvider" value="saml-generic" />
<add key="ApplicationSecurityAuthSAMLEntryPoint" value="https://{your-idp-server}/sso/saml" />
<add key="ApplicationSecurityAuthSAMLIssuer" value="https://{your-workflowgen-domain}/wfgen/auth" />
<add key="ApplicationSecurityAuthSAMLIdpIssuer" value="https://{your-idp-server}" />
<add key="ApplicationSecurityAuthSAMLCert" value="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----" />
<add key="ApplicationSecurityAuthSAMLPrivateKey" value="-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----" />
<add key="ApplicationSecurityAuthSAMLIdpCert" value="-----BEGIN CERTIFICATE-----...-----END CERTIFICATE-----" />
<add key="ApplicationSecurityAuthSessionTokenSigningSecret" value="your-session-secret" />
```

#### Paramétrages facultatifs

**Déconnexion complète via le portail**

```html
<add key="ApplicationSecurityAuthSAMLLogoutPortalUrl" value="https://{your-idp-server}/logout" />
```

**Déconnexion initiée par le fournisseur de services (SP)**

```html
<add key="ApplicationSecurityAuthSAMLLogoutUrl" value="https://{your-idp-server}/slo/saml" />
```

## Paramétrages de configuration OIDC

<table><thead><tr><th width="521.8291015625" valign="top">Paramétrage</th><th width="239.32470703125" valign="top">Description et valeurs</th></tr></thead><tbody><tr><td valign="top"><strong>Paramétrages essentiels</strong></td><td valign="top"></td></tr><tr><td valign="top"><code>ApplicationSecurityAuthProviders</code><br>(requis)</td><td valign="top">Identifiant du fournisseur d'identité<br><strong>Par défaut :</strong> Non défini</td></tr><tr><td valign="top"><code>ApplicationSecurityAuthClientId</code><br>(requis)</td><td valign="top">ID client OAuth<br><strong>Par défaut :</strong> Non défini</td></tr><tr><td valign="top"><code>ApplicationSecurityAuthClientSecret</code><br>(requis)</td><td valign="top">Secret client OAuth<br><strong>Par défaut :</strong> Non défini</td></tr><tr><td valign="top"><code>ApplicationSecurityAuthMetadataUrl</code><br>(requis)</td><td valign="top">Point de terminaison de métadonnées OIDC<br><strong>Par défaut :</strong> Non défini</td></tr><tr><td valign="top"><code>ApplicationSecurityAuthSessionTokenSigningSecret</code><br>(requis)</td><td valign="top">Secret de signature JWT<br><strong>Par défaut :</strong> Non défini</td></tr><tr><td valign="top"><strong>Revendi­cations d’utilisateur</strong></td><td valign="top"></td></tr><tr><td valign="top"><code>ApplicationSecurityAuthUsernameClaim</code></td><td valign="top">Nom de revendication du nom d’utilisateur<br><strong>Par défaut :</strong> <code>preferred_username</code></td></tr><tr><td valign="top"><code>ApplicationSecurityAuthAppIdClaim</code></td><td valign="top">Nom de revendication de l’identifiant d’application<br><strong>Par défaut :</strong> <code>appid</code></td></tr><tr><td valign="top"><code>ApplicationSecurityAuthAccessTokenUsernameClaim</code></td><td valign="top">Revendi­cation du nom d’utilisateur dans le jeton d’accès<br><strong>Par défaut :</strong> <code>upn</code></td></tr><tr><td valign="top"><strong>Paramétrages des jetons</strong></td><td valign="top"></td></tr><tr><td valign="top"><code>ApplicationSecurityAuthAudience</code></td><td valign="top">Validation de l’audience du jeton<br><strong>Par défaut :</strong> Vide</td></tr><tr><td valign="top"><code>ApplicationSecurityAuthDecodeAccessToken</code></td><td valign="top">Décoder le jeton d’accès<br><strong>Par défaut :</strong> <code>N</code></td></tr><tr><td valign="top"><code>ApplicationSecurityAuthExposeAccessTokenInCookies</code></td><td valign="top">Exposer le jeton dans les témoins (cookies)<br><strong>Par défaut :</strong> <code>N</code></td></tr><tr><td valign="top"><code>ApplicationSecurityAuthClockTolerance</code></td><td valign="top">Tolérance d’horloge JWT (secondes)<br><strong>Par défaut :</strong> <code>60</code></td></tr><tr><td valign="top"><strong>Session et flux</strong></td><td valign="top"></td></tr><tr><td valign="top"><code>ApplicationSecurityAuthSessionTokenSigningSecret</code><br> (requis) </td><td valign="top">Secret de signature du jeton de session JWT<br><strong>Par défaut :</strong> Non défini</td></tr><tr><td valign="top"><code>ApplicationSecurityAuthSessionTokenAudience</code></td><td valign="top">Audience du jeton de session JWT<br><strong>Par défaut :</strong> URL de l’application</td></tr><tr><td valign="top"><code>ApplicationSecurityAuthSessionTimeOut</code></td><td valign="top">Expiration de session (secondes)<br><strong>Par défaut :</strong> Non défini</td></tr><tr><td valign="top"><code>ApplicationSecurityAuthMobileSessionTimeOut</code></td><td valign="top">Expiration de session mobile (secondes)<br><strong>Par défaut :</strong> <code>7200</code>  <br></td></tr><tr><td valign="top"><code>ApplicationSecurityAuthResponseMode</code></td><td valign="top">Mode de réponse OIDC<br><strong>Par défaut :</strong> <code>form_post</code></td></tr><tr><td valign="top"><code>ApplicationSecurityAuthSessionRefreshEnableIFrame</code></td><td valign="top">Activer le rafraîchissement dans l’iframe<br><strong>Par défaut :</strong> <code>Y</code></td></tr><tr><td valign="top"><code>ApplicationSecurityAuthCheckSessionUrl</code></td><td valign="top">URL de l’iframe de vérification de session<br><strong>Par défaut :</strong> Vide</td></tr><tr><td valign="top"><code>ApplicationSecurityAuthLogoutUrl</code></td><td valign="top">URL de déconnexion personnalisée<br><strong>Par défaut :</strong> Vide</td></tr><tr><td valign="top"><code>ApplicationSecurityAuthAcrValues</code></td><td valign="top">Classe de contexte d’authentification<br><strong>Par défaut :</strong> Vide</td></tr></tbody></table>
