Exemples de politiques Access Gateway avancées

Cette rubrique fournit des exemples de configuration de politiques avancées. Ces exemples sont fournis à titre d'illustration et à des fins pédagogiques uniquement.

Corriger la casse de toutes les chaînes URI

Description

Convertissez toutes les chaînes URI en minuscules.

Scénario

Certains systèmes peuvent interprèter les versions en majuscules et en minuscules d'un caractère comme des lettres différentes. Saisissez toutes les lettres en minuscules pour éviter une telle situation.

Configuration

Configurez une règle protégée qui applique ce paramètre à la politique root '/' et remplacez la politique root par une politique de règles adaptatives. Consultez la section Types de politiques.

Exemple

#set all URIs to lower case
if ($request_uri ~ "/.*/.*$") {
    set_by_lua_block $request_uri_temp {
        return string.gsub(ngx.var.request_uri, "?.*", "")
	}
	set_by_lua $request_uri_low "return ngx.arg[1]:lower()" $request_uri_temp;
	rewrite ^ https://$host$request_uri_low;
}

Sélectionner les champs à envoyer à des URL précises

Description

Spécifiez les champs à inclure dans une requête adressée à une URL spécifique.

Scénario

Vous souhaitez envoyer uniquement les champs nécessaires au traitement d'une requête. Cela vous permet d'éviter d'envoyer des informations inutiles, d'économiser la bande passante et le stockage, etc.

Configuration

Cliquez sur l'icône représentant un crayon à côté du nom d'un attribut. Pour inclure l'attribut, activez le bouton à bascule afin qu'il indique Envoyer. Pour exclure l'attribut, désactivez le bouton à bascule.

Exemple

Ajoutez une variable à un en-tête.

set $TEST " ";   # Set a value for later use
proxy_set_header header_name $TEST;  #Add a value to the HTTP Header

Définir un délai d'expiration pour les chargements et téléchargements de fichiers volumineux

Description

Définissez le délai d'expiration pour le chargement et le téléchargement des fichiers volumineux.

Scénario

Access Gateway renvoie des messages d'erreur indiquant un échec du réseau lors du chargement ou du téléchargement de fichiers volumineux.

Configuration

Ouvrez une règle protégée ou règle par défaut pour une ressource et spécifiez le délai d'expiration sous Avancé > Personnalisé.

Exemple

# Specify a longer timeout for file uploads/downloads to the backend protected resource
send_timeout 5m;

Envoyer un code d'erreur et une URL spécifiques à un URI

Description

Renvoyez un code de retour et une URL spécifiques pour un URI donné.

Scénario

Vous ne souhaitez pas que les utilisateurs voient le message d'erreur par défaut et vous voulez les rediriger vers une page HTML personnalisée.

Configuration

Configurez une règle protégée qui spécifie le code de retour et l'URL.

Exemple

# Regardless of the behavior,
# for the given protected resource
# return 301
return 301 https://www.okta.com;

Spécifier un comportement en fonction des arguments de la requête

Description

Vous souhaitez configurer des réponses dynamiques pour différentes situations.

Scénario

Vous souhaitez omettre l'authentification lorsque vous testez des configurations.

Configuration

Configurez des règles protégées qui déterminent ce qui se produit lorsque certaines conditions existent.

Exemple

#If the query argument test is equal to demo
#then set the policy type field to NO_AUTH
if ($arg_test = "demo") {
    set $policy_type "NO_AUTH";
};

Réécrire des chaînes URL

Description

Lorsque les réécritures URL sont activées dans la passerelle, certains liens et redirections dirigent le navigateur vers la mauvaise URL.

Scénario

Vous avez un domaine public appelé gw.okta.com et une ressource interne appelée app1.okta.com. Vous souhaitez rediriger vos liens uniquement vers app1.okta.com.

Configuration

Configurez des règles protégées afin de rediriger les requêtes d'une URL vers une autre.

Remarques

Par défaut, subs_filter ne fonctionne qu'avec les documents text/html. Cet exemple ne fonctionne pas avec les données compressées. Consultez la section Filtre de substitutions HTTP.

Exemple pour une seule redirection

# replace source (gw.okta.com) with destination (app1.okta.com)
subs_filter http://gw.okta.com https://app1.okta.com;

Exemple pour les redirections multiples

# specify the types of files to process
subs_filter_types text/html text/css text/xml;
#
# replace source (internal....) with destination (app1...) using flags ig
# i: ignore case
# g: replace all matched strings
subs_filter internaldomain1.okta.com app1.okta.com ig;
subs_filter internaldomain2.okta.com app1.okta.com ig;

Rediriger les agents non Chrome vers un autre emplacement

Description

Redirigez tous les utilisateurs qui n'utilisent pas d'agent utilisateur spécifique (dans cet exemple, Chrome) vers une URL différente.

Scénario

Vous souhaitez empêcher les robots et d'autres requêtes automatiques d'envoyer des requêtes à vos serveurs.

Configuration

Configurez une règle protégée dans laquelle Access Gateway redirige les requêtes des agents autres que Chrome vers une URL spécifique et renvoie une erreur 301 (déplacées de manière permanente).

Exemple

# Replace Chrome with the desired user agent and configure the error and redirect URL
if ($http_user_agent !~* Chrome ) {
    return 301 https://www.okta.com;
}

Ne pas protéger certains types de fichiers

Description

Vous ne souhaitez pas protéger certains types de fichiers, comme les images et les feuilles de style.

Scénario

Votre ancienne plateforme autorisait un accès non restreint aux images, aux feuilles de style et autres fichiers similaires. Vous souhaitez faire de même avec Access Gateway.

Configuration

Configurez une règle protégée pour chaque type de fichier que vous ne souhaitez pas protéger.

Exemple

if ($request_uri ~ "^.*.png$") {
   set $policy_type "NO_AUTH";
}
if ($request_uri ~ "^.*.jpg$") {
   set $policy_type "NO_AUTH";
}
if ($request_uri ~ "^.*.css$") {
    set $policy_type "NO_AUTH";
}

Prolonger la gestion des sessions AJAX

Description

Les applications qui utilisent les appels AJAX se bloquent ou nécessitent une actualisation après l'expiration d'une session.

Scénario

Une app effectue des appels AJAX. Elle est inactive pendant un certain temps et la session expire. Lorsque l'app effectue un appel AJAX de suivi, celui-ci échoue, car la session est désormais inactive.

Configuration

Configurez une règle protégée pour prolonger la session.

Remarques

Les exemples de scripts s'exécutent à l'intervalle défini pour vérifier si une session utilisateur est inactive. Lorsqu'une session utilisateur expire, le script alerte l'utilisateur et actualise la page. S'il existe une session Okta, l'utilisateur obtient alors une nouvelle session. Sinon, l'utilisateur doit s'authentifier à nouveau.

Les scripts acceptent trois paramètres :

  • oagSMTimeoutSeconds: obligatoire, pas de valeur par défaut. La fréquence, en secondes, à laquelle le script s'exécute pour vérifier la session.
  • oagSAlertEnabled : la valeur par défaut est false. Affichez une alerte si ce paramètre est défini sur true.
  • oagSAmertMessage : le message qui apparaît dans l'alerte. Le message par défaut est La session a expiré en raison d'une inactivité.

Exemple 1

  • Destiné aux applications qui utilisent JQuery.
  • Remplacez le message de l'exemple par un message destiné au client.
proxy_set_header Accept-Encoding "";
subs_filter "</head>"
"<script type=\"text/javascript\">
	window.oagSMParams={\"oagSMTimeoutSeconds\" : 60, \"oagSMAlertEnabled\" : true,
			\"oagSMAlertMessage\" : \"Your message to be displayed\"};
</script>
<script src=\"/AQUNAAsIAAM/js/sessionTimeout.js\"></script></head>";

Exemple 2

  • Destiné aux applications qui n'utilisent pas JQuery
  • Remplacez le message de l'exemple par un message destiné au client.
proxy_set_header Accept-Encoding "";
subs_filter "</head>"
"<script type=\"text/javascript\">
	window.oagSMParams={\"oagSMTimeoutSeconds\" : 60, \"oagSMAlertEnabled\" : true,
			\"oagSMAlertMessage\" : \"Your message to be displayed\"};
</script>
<script type=\"text/javascript\" src=\"/AQUNAAsIAAM/dist/jquery.min.js\">
</script>
<script src=\"/AQUNAAsIAAM/js/sessionTimeout.js\"></script></head>";

Exemple 3

  • Destiné aux applications qui utilisent iFrame et JQuery
  • Identifiez une balise à remplacer, représentée par <tag-to-replace>, dans l'une des pages de l'iFrame.
proxy_set_header Accept-Encoding "";
subs_filter "</tag-to-replace>"
"<script type=\"text/javascript\">
	window.oagSMParams={\"oagSMTimeoutSeconds\" : 60, \"oagSMAlertEnabled\" : true,
			\"oagSMAlertMessage\" : \"Your message to be displayed\"};
</script>
<script src=\"/AQUNAAsIAAM/js/sessionTimeout.js\"></script></tag-to-replace>";

Exemple 4

  • Destiné aux applications qui utilisent iFrame, mais qui n'utilisent pas JQuery
  • Identifiez une balise à remplacer, représentée par <tag-to-replace>, dans l'une des pages de l'iFrame.
proxy_set_header Accept-Encoding "";
subs_filter "</tag-to-replace>"
"<script type=\"text/javascript\">
	window.oagSMParams={\"oagSMTimeoutSeconds\" : 60, \"oagSMAlertEnabled\" : true,
			\"oagSMAlertMessage\" : \"Your message to be displayed\"};
</script>
<script type=\"text/javascript\" src=\"/AQUNAAsIAAM/dist/jquery.min.js\">
</script>
<script src=\"/AQUNAAsIAAM/js/sessionTimeout.js\"></script></tag-to-replace>";

Rejeter les requêtes contenant certains caractères

Description

Rejetez les requêtes contenant des caractères risqués.

Scénario

Certains caractères sont utilisés dans des attaques contre des apps Web en back-end. Le rejet des requêtes contenant ces caractères supprime une surface d'attaque potentielle.

Configuration

Configurez une règle protégée qui contient les caractères que vous souhaitez bloquer.

Exemple

header_filter_by_lua_block {
-- add characters inside the brackets
reBadChars = '[><]'
  if string.match(ngx.var.uri, reBadChars) then
    ngx.log(ngx.STDERR, "Bad chars found in URI")
    return ngx.exit(403)
  end
}

Sécurité WebSocket

Description

Convertissez les appels HTTP en appels WebSocket (WSS).

Scénario

Vous utilisez WSS comme protocole de communication. Access Gateway doit indiquer au serveur principal qu'il transforme les appels provenant d'HTTP en WSS.

Configuration

Créez une règle protégée pour chaque ressource WSS :

  • Nom : WebSocket
  • Ressource : /uri/to/websocket
  • Type : Protégé
  • Ajoutez les deux éléments de script dans l'exemple pour chaque ressource.

Exemple

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";