HYPR

Le connecteur HYPR traite les requêtes d’authentification vers la plateforme HYPR. Ces requêtes sont susceptibles d’être « dépourvues de mot de passe », sans qu’aucun autre fournisseur d’identité ne fournisse d’informations sur l’identité primaire, ou elles peuvent être utilisées comme second facteur en association avec un autre fournisseur d’identité.

Ce connecteur gère l’expérience d’authentification de l’utilisateur dans le navigateur avec trois pages différentes :

  • une interface permettant à l’utilisateur de fournir son identifiant si HYPR est utilisé en tant que premier facteur sans mot de passe
  • une page intermédiaire affichée dans l’attente de la réponse de l’utilisateur à la plate-forme HYPR
  • une page d’erreur en cas de circonstances exceptionnelles

Chacune de ces pages est implémentée par défaut, mais il est possible de les personnaliser ou de modifier complètement les interactions de l’utilisateur par le biais d’une extension de services.

Options de configuration

Les valeurs suivantes sont utilisées pour configurer le connecteur HYPR via le fichier de configuration de l’orchestrateur.

Name

name est la valeur employée pour désigner ce connecteur ailleurs dans la configuration.

Domaine HYPR

hyprDomain correspond au domaine de base du compte HYPR.

ID de l’application HYPR

hyprAppID correspond au nom de l’application tel qu’il est défini dans le Centre de contrôle HYPR.

Access Token

accessToken correspond au jeton API configuré dans le Centre de contrôle HYPR. Il s’agit d’informations sensibles qui doivent être récupérées auprès d’un fournisseur de secrets dans les environnements de production. Au minimum, les autorisations d’authentification de l’application doivent lui être accordées.

Authentification par code QR

Par défaut, le connecteur Hypr utilise l’authentification par notification pour inviter l’utilisateur à s’authentifier. Cependant, vous pouvez activer l’authentification par code QR qui fait apparaître un code QR que l’utilisateur doit numériser à l’aide de l’application mobile Hypr.

Enabled

Doit être définit sur true pour utiliser l’authentification par code QR. La valeur par défaut est false.

Status Check URL (facultatif)

statusCheckURL est employé par la page intermédiaire afin d’interroger le statut en attendant que l’utilisateur termine l’authentification sur son appareil. Ce terminal est hébergé par l’orchestrateur, le domaine spécifié doit donc correspondre à un domaine hébergé par l’orchestrateur. Il peut également être défini en tant que chemin d’accès relatif. Dans les deux cas, il ne doit pas entrer en conflit avec d’autres chemins d’accès aux applications protégées. Si elle n’est pas définie, la valeur /.hypr-status-check sera utilisée.

ℹ️

Au moment de spécifier un statusCheckURL, utilisez une URL absolue (complète) comprenant le schéma, le nom de l’hôte et le chemin d’accès afin de garantir que les requêtes de statut sont acheminées correctement. Spécifiez toujours une valeur statusCheckURL personnalisée si routePattern inclut un nom d’hôte.

Par exemple, si routePattern est défini comme suit :

routePatterns:
  - api.example.com

la valeur statusCheckURL peut être :

statusCheckURL: https://api.example.com/.hypr-status-check

URL de connexion (facultatif)

loginURL est utilisé pour afficher le nom d’utilisateur à authentifier. Ce terminal est hébergé par l’orchestrateur, le domaine spécifié doit donc correspondre à un domaine hébergé par l’orchestrateur. Il peut également être défini en tant que chemin d’accès relatif. Dans les deux cas, il ne doit pas entrer en conflit avec d’autres chemins d’accès aux applications protégées. Si elle n’est pas définie, la valeur /.hypr-login sera utilisée.

ℹ️

Au moment de spécifier un loginURL, utilisez une URL absolue (complète) comprenant le schéma, le nom de l’hôte et le chemin d’accès afin de garantir que les requêtes de statut sont acheminées correctement. Spécifiez toujours une valeur loginURL personnalisée si routePattern inclut un nom d’hôte.

Par exemple, si routePattern est défini comme suit :

routePatterns:
  - api.example.com

la valeur loginURL peut être :

loginURL: https://api.example.com/login

HTML intermédiaire personnalisé (facultatif)

customInterstitialHTML La page s’affiche en attendant que l’utilisateur réponde à l’invite HYPR. Elle doit contenir l’emplacement d’une page HTML dans le système de fichiers. Si la valeur n’est pas définie, une page intermédiaire par défaut sera utilisée.

Custom Login HTML (facultatif)

customLoginHTML correspond à la page qui s’affiche pour inviter l’utilisateur à saisir son nom d’utilisateur HYPR. Elle doit contenir l’emplacement d’une page HTML dans le système de fichiers. Si la valeur n’est pas définie, une page de connexion par défaut sera utilisée.

Erreur HTML personnalisée (facultatif)

customErrorHTML correspond à la page qui s’affiche en cas d’erreur. Elle doit contenir l’emplacement d’une page HTML dans le système de fichiers. Si la valeur n’est pas définie, une page d’erreur par défaut sera utilisée.

Exemples

Utilisation de HYPR en tant que fournisseur d’identité

Push Based Authentication

connectors:
  - name: hypr
    type: hypr
    hyprDomain: "https://example.hypr.com"
    hyprAppID: "strata"
    accessToken: <HYPR_SECRET>

apps:
  - name: ExampleApp
    type: proxy
    routePatterns:
      - /
    upstream: https://app.exmaple.com

    policies:
      - location: /
        authentication:
          idps:
            - hypr
        authorization:
          allowAll: true

QR Code Authentication

connectors:
  - name: hypr
    type: hypr
    hyprDomain: "https://example.hypr.com"
    hyprAppID: "strata"
    accessToken: <HYPR_SECRET>
    qrAuthentication:
      enabled: true

apps:
  - name: ExampleApp
    type: proxy
    routePatterns:
      - /
    upstream: https://app.example.com

    policies:
      - location: /
        authentication:
          idps:
            - hypr
        authorization:
          allowAll: true

Personnalisation de l’expérience de connexion

Il existe trois points de personnalisation pour les interactions utilisateur du connecteur HYPR. Chacun d’entre eux peut fournir une page HTML personnalisée stockée dans un emplacement accessible par l’orchestrateur, comme indiqué ci-dessus. L’orchestrateur utilise Go Templates pour fournir les éléments pertinents à restituer.

Page de connexion personnalisée

Cette page doit POSTER le contenu du nom d’utilisateur à l’URL de connexion, qui sera fournie dans la valeur du modèle LoginURL. La page initialement demandée se trouve dans la valeur du modèle RedirectURL et doit être transmise à l’URL de connexion en même temps que le nom d’utilisateur.

<html>
  <body>
    <form method="POST" action="{{.LoginURL}}">
      <input type="hidden" name="redirectURL" value="{{.RedirectURL}}">
      <input type="text" name="username">
      <input type="submit">
    </form>
  </body>
</html>

Page intermédiaire personnalisée

Il s’agit d’une page d’attente de la session du navigateur de l’utilisateur qui s’affiche en attendant qu’il réponde à l’invitation de l’application HYPR. Elle interroge la valeur du modèle StatusCheckURL pour déterminer si la requête est satisfaite. L’URL initialement demandée est disponible dans la valeur du modèle RedirectURL.

<html>
  <script type="text/javascript">
    function checkHYPRStatus() {
      var xmlhttp = new XMLHttpRequest();
      xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == XMLHttpRequest.DONE) {
          if (xmlhttp.responseText == "COMPLETED") {
            window.location.replace("{{.RedirectURL}}");
            return;
          }
        }
      }
    };
    xmlhttp.open("GET", "{{.StatusCheckURL}}", true);
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.send();
   checkHYPRStatus();
  </script>
  <body>
    We're sending you a notification to confirm it's really you...
  </body>
</html>

Page d’erreur personnalisée

Cette page est utilisée pour afficher les messages d’erreur, qui sont disponibles dans la valeur du modèle Error.

<html>
  <body>
    An error has occurred: {{.Error}}
  </body>
</html>