Fonctions d'attribut
Vous pouvez utiliser la syntaxe et les exemples d'API de configuration pour créer des fonctions personnalisées.
Présentation
Utilisez des fonctions pour référencer, transformer et combiner des valeurs d'attribut avant leur transmission à une application sous la forme d'un jeton d'authentification de connexion unique ou lors de la mise à disposition des comptes. IBM® VerifyLes fonctions peuvent accéder aux informations d'identification de la source d'identité utilisées pour l'authentification, à l'objet utilisateur (au format SCIM) stocké dans Cloud Directory, ainsi qu'à tout point de terminaison API externe. Par exemple, un attribut appeléformalDisplayName peut être créé en tant qu'attribut de valeur fixe et une fonction peut être spécifiée pour concaténer user.name.givenName et user.name.familyName d'une manière spécifiée.Pour configurer les attributs avancés des règles, accédez à dans la console d'administration. Mettez ensuite en correspondance ces attributs dans la configuration de l'application, comme vous le feriez pour tous les autres types d'attributs.
Pour plus d'informations et d'exemples sur l'utilisation des codes de fonction dans les workflows avancés, consultez les guides d'orchestration.
Objets de domaine
Le terme, objets de domaine, est une phrase fourre-tout permettant d'indiquer tous les objets possibles accessibles dans une fonction personnalisée d'un attribut.
- Utilisateur Cloud Directory
Pour chaque utilisateur qui s'authentifie, Verify un compte utilisateur est créé dans Cloud Directory. Ce compte est représenté sous la forme d'un objet SCIM. Dans les exemples suivants, le compte utilisateur Cloud Directory suivant est utilisé.
L'objet SCIM suivant est le compte utilisateur.{ "id": "600000A3DD", "userName": "google-oauth2|1033116550041553242@jke.samlfed.com", "emails": [ { "type": "work", "value": "jessica@jke.com" } ], "meta": { "created": "2019-04-26T09:21:35Z", "location": "https://jke.cloudidentity.com/v2.0/Users/600000A3DD", "lastModified": "2019-04-26T09:21:35Z", "resourceType": "User" }, "schemas": [ "urn:ietf:params:scim:schemas:core:2.0:User", "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User", "urn:ietf:params:scim:schemas:extension:ibm:2.0:User" ], "name": { "formatted": "Jessica Hill", "familyName": "Hill", "givenName": "Jessica" }, "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": { "manager": { "value": "6030101TP6" } }, "urn:ietf:params:scim:schemas:extension:ibm:2.0:User": { "userCategory": "federated", "twoFactorAuthentication": false, "realm": "jke.samlfed.com", "unqualifiedUserName": "google-oauth2|1033116550041553242", "customAttributes": [ { "name": "car", "values": [ "Ford Mustang Mach-E", "Maruti Suzuki 800" ] }, { "name": "hobbies", "values": [ "Reading", "Running", "Gaming", "Star Wars" ] } ] }, "active": true }Remarque : dans l'objet SCIM, deux attributs personnalisés sont définis :carethobbies. Ces attributs sont des extensions de schéma qui peuvent être configurées via la console d'administration. Des valeurs peuvent être ajoutées à l'objet utilisateur via l'API Verify Users.Syntaxe Descriptif Exemples user.$propertyAccédez à $property. .et[".."]peuvent être utilisés.user.name.familyName + ", " + user.name["givenName"]Résultat :
Hill, Jessicauser.$values.filter(x, $condition)$values : Une liste. La fonction filterextrait des valeurs basées sur$condition.user.emails.filter(x, x.type == "work")[0].valueRésultat :
jessica@jke.comuser.getCustomValues($attrName)Fonction permettant d'obtenir les valeurs d'attributs personnalisés sous forme de liste. $attrName: Le nom de l'attribut dans l'objet utilisateur renvoie la valeur null si cet attribut n'existe pas.user.getCustomValues("car")Résultat :
["Ford Mustang Mach-E","Maruti Suzuki 800"]user.getCustomValue($attrName)Fonction permettant d'obtenir la première valeur d'attribut personnalisé de la liste. $attrName: Nom de l'attribut dans l'objet utilisateur. Renvoie une chaîne vide (« ») si l'attribut n'existe pas.user.getCustomValue("hobbies")Résultat :
Readinguser.getManager()Fonction permettant d'obtenir les informations relatives au responsable de l'utilisateur actuel. La fonction renvoie le compte utilisateur du responsable (sous la forme d'un objet SCIM). Si aucun responsable n'est spécifié pour l'utilisateur, un objet JSON vide est renvoyé. Si un objet gestionnaire est renvoyé, il peut être utilisé comme l'objet utilisateur, c'est-à-dire que les différentes fonctions peuvent être appelées sur cet objet. user.getManager().name.formattedRésultat :
Jacob Jonesuser.getRoles()Fonction permettant d'obtenir les droits de l'utilisateur actuel. La fonction renvoie la liste des droits de l'utilisateur sous la forme d'un objet JSON. Si la liste des droits est renvoyée, elle peut être utilisée comme un objet JSON. user.getRoles().resources[0].nameRésultat :
Basic accessuser.getFIDO2Registrations($search)Fonction permettant d'obtenir les inscriptions à FIDO2 de l'utilisateur actuel. La fonction renvoie la liste des inscriptions sur FIDO2 attribuées à l'utilisateur. Il est possible de fournir des paramètres $searchde recherche. Vous trouverez ici la liste des paramètres de recherche pris en charge : https://docs.verify.ibm.com/verify/reference/getfidoregistrations_v20user.getFIDO2Registrations("enabled=true").fido2[0].enabledRésultat :
trueuser.getFIDO2RegistrationByID($id)$idFonction permettant d'obtenir les informations d'inscription sur FIDO2 de l'utilisateur actuel dont l'identifiant est.user.getFIDO2RegistrationByID("e8bf1dac-8245-452b-b7c4-8a700a1eb078").fido2[0].idRésultat :
e8bf1dac-8245-452b-b7c4-8a700a1eb078user.getDynamicGroups()Fonction permettant d'obtenir les groupes dynamiques de l'utilisateur actuel. La fonction renvoie la liste des groupes dynamiques de l'utilisateur sous la forme d'un objet JSON. user.getDynamicGroups().resources[0].nameRésultat :
Security department manager- Fonctions de gestion des utilisateurs
Les fonctions suivantes sont disponibles dans CELx lorsqu'il est nécessaire d'effectuer des opérations de lecture, de création et de mise à jour sur les utilisateurs du Cloud Directory.
Ces fonctions renvoient un objet « map » tel que défini ci-dessous. Cela offre une certaine souplesse pour la gestion des erreurs dans la fonction CELx.errorUne chaîne vide signifie que l'opération s'est déroulée avec succès.{ "result": <result of the operation>, "error": <error message, in case of failures> }Syntaxe Descriptif Exemples findUsers($filter)La fonction renvoie une liste des utilisateurs qui correspondent au filtre indiqué. $filter: Chaîne de caractères définissant les critères de recherche selon le format spécifié dans l'API GET Users. Le nombre d'utilisateurs dans la réponse à la recherche est limité à 10.Si aucun utilisateur n'a été trouvé, une liste vide est renvoyée.
findUsers('emails ew "@jke.com"')findUsers($filter, $attributes)La fonction renvoie une liste des utilisateurs qui correspondent au filtre indiqué. Chaque utilisateur correspondant renvoie les attributs spécifiés dans l'argument $attributes.$filter: La chaîne de caractères qui définit les critères de recherche.$attributes: Le tableau de chaînes de caractères de type « scimNames » qui doit être renvoyé dans le résultat.Reportez-vous au format des paramètres de requête défini dans l'API GET Users. Le nombre d'utilisateurs dans la réponse à la recherche est limité à 10.
Si aucun utilisateur n'a été trouvé, une liste vide est renvoyée.
findUsers('emails ew "@jke.com"', ["emails", "name.givenName"])findUsers($filter, $attributes, $count)La fonction renvoie une liste d'utilisateurs correspondant au filtre indiqué, dans la limite de $count. Chaque utilisateur correspondant ne renvoie que les attributs spécifiés dans l'argument $attributes.$filter: La chaîne de caractères qui définit les critères de recherche.$attributes: Un tableau de chaînes de caractères contenant les « scimNames » à renvoyer dans le résultat.$count: Nombre entier permettant de spécifier le nombre maximal d'utilisateurs à renvoyer, avec une limite de 10. Toute valeur supérieure à 10 est ignorée et remplacée par 10. Reportez-vous au format des paramètres de requête défini dans l'API GET Users.Si aucun utilisateur n'a été trouvé, une liste vide est renvoyée.
findUsers('emails ew "@jke.com"', ["emails", "name.givenName"], 3)findUser($filter)La fonction renvoie un seul utilisateur correspondant au filtre indiqué. $filter: La chaîne qui définit les critères de correspondance selon le format défini dans l'API GET Users.Une erreur est renvoyée si plusieurs utilisateurs ont été trouvés ou si aucun utilisateur n'a été trouvé.
findUser('emails eq "jessica@jke.com"')findUser($filter, $attributes)La fonction renvoie un seul utilisateur correspondant au filtre indiqué. L'utilisateur ne renvoie que les attributs spécifiés dans l'argument $attributes.$filter: Chaîne de caractères définissant les critères de correspondance.$attributes: Tableau de chaînes de caractères contenant les éléments de l' scimNames s qui doivent être renvoyés dans le résultat. Reportez-vous au format des paramètres de requête défini dans l'API GET Users.Une erreur est renvoyée si plusieurs utilisateurs ont été trouvés ou si aucun utilisateur n'a été trouvé.
findUser('emails eq "jessica@jke.com"', ["emails", "name.givenName"])getUser($uid)$uidLa fonction renvoie l'utilisateur associé à l'élément donné. Une erreur est renvoyée si l'utilisateur n'existe pas.getUser("504K8664N6")createUser($m)Cette fonction crée un utilisateur avec les valeurs d'attributs indiquées. $m: Une liste répertoriant l'ID ou le nom des attributs ainsi que la valeur souhaitée par l'utilisateur.Les identifiants des attributs se trouvent dans la réponse de l'API GET Attributes. L'identifiant et le nom de l'attribut peuvent être utilisés indifféremment.
Les valeurs des
emailattributs etusernamesont obligatoires. Les autres valeurs sont facultatives.Pour définir le mot de passe du nouvel utilisateur, ajoutez une propriété dans $m dont le nom
passwordest et dont la valeur correspond au mot de passe en clair.En cas de réussite, l'objet SCIM de l'utilisateur créé est renvoyé dans
result.createUser({'3':'jessica@jke.com', 'userName':'Jessica', '3f31edcf-19e8-46a4-b87e-e50c25dc1358':'Manager', 'hobbies':['Reading', 'Swimming'], '6': 'Jessica', '7': 'Doe'})createUser($m, $opts)Cette fonction crée un utilisateur avec les valeurs d'attributs indiquées et des options supplémentaires. $m: Une liste répertoriant l'ID ou le nom des attributs ainsi que la valeur souhaitée par l'utilisateur.$opts: Une liste des options supplémentaires pouvant être spécifiées lors de la création d'un utilisateur.Les identifiants des attributs se trouvent dans la réponse de l'API GET Attributes. L'identifiant et le nom de l'attribut peuvent être utilisés indifféremment.
Les valeurs des
emailattributs etusernamesont obligatoires. Les autres valeurs sont facultatives. Pour définir le mot de passe du nouvel utilisateur, ajoutez une propriété dans$mportant le nompasswordet dont la valeur correspond au mot de passe en clair.Les propriétés suivantes sont actuellement autorisées dans $opts :
- notifyType : cette propriété indique le type de notification à envoyer à l'utilisateur. La valeur par défaut est
EMAIL. - notifyPassword : valeur booléenne indiquant si le mot de passe de l'utilisateur est inclus dans la notification qui lui est envoyée. La valeur par défaut est
true. Cet attribut ne s'applique pas sinotifyTypeest défini surNONE. - notifyManager : valeur booléenne indiquant si une notification doit être envoyée au responsable de l'utilisateur (s'il y en a un) lorsque le mot de passe de l'utilisateur est défini ou modifié. La valeur par défaut est
false. Cet attribut ne s'applique pas sinotifyTypeest défini surNONE. - acceptInitialPassword : si cette option est définie sur « true », l'utilisateur n'est pas obligé de modifier son mot de passe lors de sa première connexion.
En cas de réussite, l'objet SCIM de l'utilisateur créé est renvoyé dans
result.createUser({'3':'jessica@jke.com', 'userName':'Jessica', '3f31edcf-19e8-46a4-b87e-e50c25dc1358':'Manager', 'hobbies':['Reading', 'Swimming'], '6': 'Jessica', '7': 'Doe'}, {'notifyType':'NONE', 'acceptInitialPassword': 'true'})updateUser($uid, $m)Cette fonction met à jour l'utilisateur indiqué avec les valeurs d'attribut spécifiées.
$uid: L'identifiant de l'utilisateur à mettre à jour.$m: Une liste répertoriant l'ID ou le nom des attributs ainsi que la valeur souhaitée par l'utilisateur.Les identifiants des attributs se trouvent dans la réponse de l'API GET Attributes. L'identifiant et le nom de l'attribut peuvent être utilisés indifféremment.
Une mise à jour réussie renvoie
successune chaîne de caractères comme résultat. L'objet utilisateur n'est pas renvoyé.updateUser('6050007SGF', {'3':'jessica@redbank.com', '3f31edcf-19e8-46a4-b87e-e50c25dc1358':'President', 'mobile_number': '502513585', 'work_country': 'Singapore'})- notifyType : cette propriété indique le type de notification à envoyer à l'utilisateur. La valeur par défaut est
- Donnée d'identification de la source d'identité
- Lorsqu'un utilisateur se connecte à Verify, les attributs d'identification de la source d'identité sont ajoutés à la session de connexion et peuvent être consultés dans une fonction personnalisée. Considérez que l'utilisateur se connecte avec un fournisseur d'identité fédéré SAML et que l'assertion SAML contient une instruction d'attribut appelée
userRoleset définie surmarketingethelpdesk.L'attributidsuserest disponible sous la forme d'une mappe avec une clé de chaîne et une valeur de tableau de chaînes. Par exemple :{ "userRoles": ["marketing", "helpdesk"], "displayName": ["Jessica J. Hill"], "phone": ["+12324321234"], "employeeId": "eid1234" }Syntaxe Descriptif Exemples idsuser.$propertyAccédez à $property. La valeur deidsuserest toujours un tableau de chaînes.idsuser.userRoles[1]Résultat :
helpdeskidsuser.getValue($property)Renvoie la valeur de $propertysous forme de chaîne. Si le tableau de valeurs comporte plusieurs entrées, le premier élément est renvoyé. Si$propertyn'existe pas, une chaîne vide est renvoyée.idsuser.getValue('userRoles')Résultat :
"Marketing"idsuser.getValues($property)Renvoie toutes les valeurs de $propertysous forme de tableau de chaînes. Si$propertyn'existe pas, un objetnilest renvoyé.idsuser.getValues('userRoles')Résultat :
["Marketing", "helpdesk]" - Contexte de demande HTTP
Lorsqu'un utilisateur se connecte à IBM Verify, le contexte de la requête entrante HTTP est accessible dans une fonction personnalisée. Si l'utilisateur se connecte avec un flux OAuth et que le client envoie les informations
client-ipetuser-agent,requestContextpeut extraire les informations. Il peut être utilisé pour appeler un noeud final externe pour déterminer le score de risque de l'utilisateur.requestContextest disponible sous la forme d'une mappe avec une clé de chaîne et une valeur de tableau de chaînes. Par exemple :{ "User-Agent": ["Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405"], "devicePlatform": ["MACOS"], "x-forwarded-for": ["116.15.12.181"] }Tableau 1. HTTP contexte de la requête Syntaxe Descriptif Exemple requestContext.$propertyAccédez à $property. La valeur derequestContextest toujours un tableau de chaînes.requestContext.devicePlatform[1]Résultat :
MACOSrequestContext.getValue($property)Renvoie la valeur de $propertysous forme de chaîne. Si le tableau de valeurs comporte plusieurs entrées, le premier élément est renvoyé. Si$propertyn'existe pas, une chaîne vide est renvoyée.requestContext.getValue('x-forwarded-for')Résultat :
116.15.12.181requestContext.getValues($property)Renvoie toutes les valeurs de $propertysous forme de tableau de chaînes. Si$propertyn'existe pas, un objet nil est renvoyé.requestContext.getValues('x-forwarded-for')Résultat :
["116.15.12.181"]- Contexte d'attribut
- L'objet de contexte inclut des paires clé/valeur de certaines propriétés de l'attribut qui peuvent
être utilisées lors de l'écriture de fonctions. Les valeurs de ces propriétés sont valides uniquement lors
de la recherche de cet attribut. Cet objet est accessible à l'aide de la clé
ctx.Les propriétés suivantes sont disponibles avec l'objet de contexte :Syntaxe Descriptif Exemples ctx.currentValueAccédez à la valeur d'attribut évaluée avant l'exécution de cette fonction. Le type de données de cette valeur est spécifié lors de la configuration des attributs. Si la valeur ne peut pas être transtypée en type de données, cet élément a la valeur null. ctx.currentValue.toUpper
Opérateurs standard
+, -, *, /, >, <. + peut être utilisé pour concaténer des chaînes.| Opérateur | Descriptif | Exemples |
|---|---|---|
== |
Egal à |
|
!= |
Différent de |
|
|| |
Opérateur de comparaison logique AND |
|
&& |
Opérateur de comparaison logique AND |
|
[ ] |
Accès de mappe |
|
+ |
Concaténation et ajout, en fonction du type |
|
- |
Soustraction |
|
* |
Multiplication |
|
/ |
Département |
|
> |
Supérieur à |
|
< |
Inférieur à |
|
>= |
Supérieur ou égal à |
|
<= |
Inférieur ou égal à |
|
? |
Opérateur ternaire if |
|
Fonctions standard
| Syntaxe | Descriptif | Exemples |
|---|---|---|
$string.contains($fragment) |
Vérifie si $fragment se trouve dans $string. |
Résultat : true |
$string.endsWith($fragment) |
Vérifie si $string se termine par $fragment. |
Résultat : false |
$string.matches($regex) |
Vérifie si $regex correspond au modèle dans $string. |
Résultat : false |
$string.toUpper() |
Convertit $string en majuscules. |
Résultat : HELLO |
$string.toLower() |
Convertit $string en caractères minuscules. |
Résultat : hello |
$string.base64Encode() |
Base64 code $string. |
Résultat : aGVsbG8= |
$string.base64Decode() |
Base64 décode $string. |
Résultat : hello |
$string.base64URLEncode() |
Base64URL encode $string. |
Résultat :
|
$string.base64URLDecode() |
Base64URL décode $string. |
Résultat :
|
$string.size() |
Taille de $string |
Résultat : 5 |
$string.substring($begin,$end) |
Renvoie la chaîne entre $begin index (including) et $end index (excluding). |
Résultat : ell |
$string.split($delim) |
Retourne le tableau des chaînes qui sont divisées par le $delim. |
Résultat : ["h","llo"] |
$string.replaceAll($old,$new) |
Remplace toutes les occurrences de $old par $new. |
Résultat : heppo |
$string.matchAndReplaceAll($regex, $newStr) |
Remplace toutes les correspondances de $regex avec $newStr. |
Résultat : some-text |
$string.indexOf($str) |
Renvoie l'index de la première occurrence de $str. |
Résultat : 2 |
$string.lastIndexOf($str) |
Renvoie l'index de la dernière occurrence de $str. |
Résultat : 3 |
| Syntaxe | Descriptif | Exemples |
|---|---|---|
$values.size() |
Taille de la liste $values |
Résultat :
|
$values.filter(x, $condition) |
Filtre $values par $condition. |
Résultat :
|
$values.all(x, $condition) |
Vérifie si toutes les $values satisfont $condition. |
Résultat :
|
$values.exists(x, $condition) |
Vérifie si une valeur satisfait $condition. |
Résultat :
|
$values.exists_one(x, $condition) |
Vérifie si exactement une valeur satisfait $condition. |
Résultat :
|
$values.map(x, $op) |
Exécute $op sur chaque valeur. |
Résultat :
|
stringToJson($s) |
Convertit la chaîne $s en un tableau JSON. |
Résultat :
|
jsonToString($json) |
Convertit la liste $json en chaîne. |
Résultat :
|
joinStrings($values, $s) |
Joint les chaînes dans la liste $values avec le séparateur $s. |
Résultat :
|
$values.flatten() |
Convertit une liste de listes $values en une seule liste. |
Résultat :
|
{
idsuser: {
"attr1":"value1",
"attr2":"value2"
}
}alors pour la fonction idsuser.exists(x, $condition), x est [ "attr1", "attr2" ].| Syntaxe | Descriptif | Exemples |
|---|---|---|
sha256($value) |
Calcule la valeur de hachage sha256 pour la chaîne spécifiée. Le résultat est une chaîne de caractères représentant une valeur hexadécimale. |
Résultat :
|
sha512($value) |
Calcule la valeur de hachage sha512 pour la chaîne spécifiée. Le résultat est une chaîne de caractères représentant une valeur hexadécimale. |
Résultat :
|
hmacSha1($value, $key) |
Calcule la valeur HMAC-SHA1 avec la clé $key pour la chaîne indiquée. Le résultat est une chaîne de caractères représentant une valeur hexadécimale. |
Résultat: |
| Syntaxe | Descriptif | Exemples |
|---|---|---|
base64ToHex($value) |
Convertit la chaîne de caractères $value au format « base64-encoded » en une valeur hexadécimale. |
Résultat :
|
hexToBase64($value) |
Convertit la valeur hexadécimale $value en une chaîne de caractères au format « base64-encoded ». |
Résultat :
|
base64URLEncodedToHex($value) |
Convertit la chaîne de caractères $value au format « base64URL-encoded » en une valeur hexadécimale. |
Résultat :
|
hexToBase64URLEncoded($value) |
Convertit la valeur hexadécimale $value en une chaîne de caractères au format « base64URL-encoded ». |
Résultat :
|
| Syntaxe | Descriptif | Exemples |
|---|---|---|
has($m.$p) |
Vérifie si la carte $m contient la propriété $p. |
Résultat :
|
has($m, $p) |
Vérifie si la mappe $m contient la propriété $p. Cela s'avère pratique pour les noms de propriétés contenant des caractères spéciaux (comme des points, par exemple). |
Résultat :
|
jsonToString($m) |
Convertir la carte $m en chaîne de caractères |
Résultat :
|
stringToJson($s) |
Convertit la chaîne $s en une carte. |
Résultat :
|
jsonToFormURLEncoded($m, $doUrlEncode) |
Convertit la mappe $m en une forme. Si $doUrlEncode est défini sur true, le formulaire est encodé en format « URL ». |
Résultat :
|
$m.put($k, $v) |
Insère la clé $k de type chaîne de caractères avec la valeur $v de type objet dans la table $m. $vSi la table $m contenait déjà une valeur pour la clé $k, l'ancienne valeur est remplacée par la nouvelle. |
Résultat : "{"hello": "world", "key1": "value1"} |
$m.putAll($v) |
Insère le contenu de la carte $v dans la carte $m. $v$vSi la table $m contenait auparavant une valeur pour une clé présente dans la table, l'ancienne valeur de la table $m est remplacée par la valeur de la table. |
Résultat : "{"hello": "world", "key1": "value1", "test": true} |
$m.remove($k) |
Supprime l'entrée associée à la clé $k de type chaîne de caractères de la table $m si elle existe. |
Résultat : {"hello": "world"} |
$m.removeAll($l) |
Supprime toutes les correspondances associées à la liste de clés $l de la table $m , si elles existent. |
Résultat : {"hello": "world"} |
exists fonction List.idsuser.exists(x, x == "ext:idsource_attr1")Elle renvoie true si la propriété existe et false dans le cas contraire.| Syntaxe | Descriptif | Exemples |
|---|---|---|
now |
Renvoie un objet d'horodatage de l'heure en cours. |
Résultat : "2021-08-17T08:24:58Z" |
timestamp($s) |
Renvoie un objet horodateur en convertissant la chaîne de caractères $s conformément à la norme RFC3339. |
Résultat :
|
$t.getDate() |
Renvoie le jour du mois à partir de l'horodatage $t sous la forme d'un entier, avec une indexation à base un. |
Résultat : 17 |
$t.getDayOfMonth() |
Renvoie le jour du mois à partir de l'horodatage $t sous la forme d'un entier, avec une indexation à base zéro. |
Résultat : 16 |
$t.getDayOfWeek() |
Renvoie le jour de la semaine à partir de l'horodatage $t sous forme d'entier à base zéro, zéro pour dimanche. |
Résultat : 2 |
$t.getDayOfYear() |
Renvoie le jour de l'année à partir de l'horodatage $t sous la forme d'un entier, avec une indexation à base zéro. |
Résultat : 228 |
$t.getMonth() |
Renvoie le mois de l'horodatage $t sous la forme d'un entier, avec une indexation à base zéro. |
Résultat : 7 |
$t.getFullYear() |
Renvoie l'année à partir de l'horodatage $t sous la forme d'un entier. |
Résultat : 2021 |
$t.getHours() |
Renvoie les heures de l'horodatage $t sous forme d'entier. |
Résultat : 8 |
$t.getMinutes() |
Renvoie les minutes de l'horodatage $t sous la forme d'un entier. |
Résultat : 24 |
$t.getSeconds() |
Renvoie les secondes de l'horodatage $t sous la forme d'un entier. |
Résultat : 58 |
$t.getMilliseconds() |
Renvoie les millisecondes de l'horodatage $t sous la forme d'un entier. |
Résultat : 642 |
int($t) |
Convertit l'horodatage en int64 nombre de secondes depuis l'époque UNIX®. |
Résultat : 1629188698 |
duration($d) |
La durée $d doit être donnée sous la forme d'une chaîne se terminant par « s », ce qui correspond à la durée en secondes. |
Résultat : "2021-08-17T09:24:58Z" |
formatTime($t, $s) |
Renvoie l'horodatage $t au format $s. Il $s faut utiliser l'heure de référence « Lundi 02-January-06 15 h 04 min 05 s MST » dans le format souhaité. |
Résultat :
|
| Syntaxe | Descriptif | Exemples |
|---|---|---|
encodeURI($uri) |
Renvoie une chaîne représentant la chaîne $uri fournie, encodée sous forme d'URI. Cette méthode échappe tous les caractères sauf : A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #. |
Résultat : "test.html?name=J%C3%BCrgen&car=audi" |
decodeURI($uri) |
$uriRenvoie une chaîne de caractères représentant la version décodée de l'URI codé. |
Résultat : "test.html%3Fname%3DJ%C3%BCrgen%26car%3Daudi" |
encodeURIComponent($uri) |
Renvoie une chaîne représentant la chaîne $uri fournie, encodée sous forme de composant URI. Cette méthode échappe tous les caractères sauf : A-Z a-z 0-9 - _ . ! ~ * ' ( ). |
Résultat : "test.html%3Fname%3DJ%C3%BCrgen%26car%3Daudi" |
decodeURIComponent($uri) |
$uriRenvoie une chaîne de caractères représentant la version décodée du composant URI encodé. |
Résultat : "test.html?name=Jürgen&car=audi" |
Fonctions UUID
| Syntaxe | Descriptif | Exemples |
|---|---|---|
genUUID() |
Génère un UUID conforme à la norme RFC 4122 et aux spécifications DCE ( 1.1: ) relatives aux services d'authentification et de sécurité. |
Résultat : 4eb1a3f3-5461-4b91-8d69-69e25f2a1b6a |
Fonctions de type et de conversion
| Syntaxe | Descriptif | Exemples |
|---|---|---|
type($value) |
Renvoie le type de $value. |
Résultat:
Résultat : "string" |
bool($string) |
Convertit la chaîne $string en une valeur booléenne. Les valeurs admises pour true sont "true", "True", et "TRUE".Les valeurs admises pour |
Résultat : true
Résultat : false |
bytes($string) |
Convertit la chaîne $string en octets. |
Résultat : "aGVsbG8=" |
double($value) |
Convertit la valeur $value en nombre à virgule flottante de type double. Le type $value peut être l'un des suivants : int, uint ou string. |
Résultat : 2.5
Résultat :
|
int($value) |
Convertit la valeur $value en un entier. Le type $value peut être l'un des suivants : double, uint, string, enum ou timestamp. Si un horodatage est fourni, la valeur renvoyée correspond à la seconde à partir de l'époque de l' Unix. |
Résultat :
Résultat :
Résultat : 123
Résultat : 1742801032 |
uint($value) |
Convertit la valeur $value en un entier sans signe. Le type $value peut être l'un des suivants : double, int ou string. |
Résultat : 3
Résultat : 123 |
string($value) |
Convertit la valeur $value en chaîne de caractères. Le type $value peut être l'un des suivants : bool, int, uint, double, bytes, timestamp ou duration. Si une durée est indiquée, la valeur est convertie en secondes et en fractions de seconde, avec le suffixe « s ». Si un horodatage est fourni, la valeur est convertie au format RFC3339. |
Résultat :
Résultat : "1234"
Résultat : "hello"
Résultat : "60.1s"
Résultat : "2025-03-24T07:42:51Z" |
Client HTTP
- Le jeton d'en-tête d'autorisation doit être généré par le consommateur. Par exemple, il peut s'agir d'une clé d'API longue durée intégrée dans la fonction.
| Syntaxe | Descriptif | Exemples |
|---|---|---|
hc.Get($url, $headers) |
Renvoie le code d'état, les en-têtes de réponse et le corps de la réponse. Le corps de la réponse sera renvoyé sous forme d'objet JSON si le type de contenu est « application/json », ou sous forme de chaîne de caractères pour tout autre type de contenu.
|
Résultat :
|
hc.GetAsString($url, $headers) |
Renvoie la réponse sous forme de chaîne sérialisée. $url: URL du nœud final d'API doit être un objet $headers: JSON URL complet sous la forme {"headerName":"headerVal"}. |
Résultat :
|
hc.GetAsJson($url, $headers) |
Analyse la réponse sous forme d'objet JSON. $url: URL du nœud final d'API doit être un objet $headers: JSON URL complet sous la forme {"headerName":"headerVal"}. |
Résultat :
|
hc.Post($url, $headers, $body) |
Renvoie le code de statut, les en-têtes de réponse et le corps de la réponse. Le corps de la réponse est renvoyé en tant qu'objet JSON si le type de contenu est application/json ou sous la forme d'une chaîne pour tout autre type de contenu.
|
Résultat :
|
hc.Patch($url, $headers, $body) |
Renvoie le code d'état, les en-têtes de réponse et le corps de la réponse. Le corps de la réponse est renvoyé sous forme d'objet JSON si le type de contenu est « application/json », ou sous forme de chaîne de caractères pour tout autre type de contenu.
|
Résultat :
|
hc.Put($url, $headers, $body) |
Renvoie le code d'état, les en-têtes de réponse et le corps de la réponse. Le corps de la réponse sera renvoyé sous forme d'objet JSON si le type de contenu est « application/json », ou sous forme de chaîne de caractères pour tout autre type de contenu.
|
Résultat : {"statusCode": "200", "responseHeaders": {"header": ["value1", "value2"]}, "responseBody": {"message": "success"}} |
hc.Delete($url, $headers) |
Renvoie le code d'état, les en-têtes de réponse et le corps de la réponse. Le corps de la réponse sera renvoyé sous forme d'objet JSON si le type de contenu est « application/JSON », ou sous forme de chaîne de caractères pour tout autre type de contenu.
{"headerName":"headerVal"} |
Résultat :
|
hc.Opts($options) |
$options: Huit indicateurs sont actuellement pris en charge :
hc, donc GetAsJSON et GetAsString peuvent être appelés. |
|
$protocol://$host[:$port].- Le protocole
$protocoldoit être soit « http », soit « https ». - Le nom
$hostdoit être un nom de domaine complet (FQDN). Les adresses IP ne sont pas autorisées. - Le numéro
$portde port est facultatif. Les ports suivants sont pris en charge par le client HTTP. L'utilisation de tout autre port entraîne un délai d'expiration.- Les ports 80, 443 et 8088
- Plage de ports : 7000-7050
- Plage de ports : 8000-8050
La mise en cache des réponses HTTP est activée par défaut pour les appels GET (GetAsString et GetAsJSON) avec une expiration de cache par défaut de 1 minute. Il est désactivé par défaut pour les appels POST. Pour remplacer les paramètres par défaut de la mise en cache des réponses du client HTTP, l'indicateur cache doit être inclus dans hc.Opts avec la valeur true ou false. La durée de vie du cache est définie sur 60 secondes par défaut. Pour remplacer la durée de vie du cache par défaut, l'indicateur cacheExpiry doit être inclus dans hc.Opts avec la valeur en secondes, jusqu'à un maximum de 3600 secondes (une heure).
Risque adaptatif
Utilisez des fonctions de risque d'accès adaptatif pour accéder au niveau de risque de session utilisateur en cours et aux données d'autorisation associées.
Une règle d'accès adaptatif doit être évaluée au moins une fois dans la session avant d'utiliser l'attribut personnalisé pour vérifier que les données sont renseignées, sinon la valeur “NOT_AVAILABLE” est renvoyée.
Les fonctions de gestion des risques liés à l'accès adaptatif permettent d'accéder aux conditions de la politique d'accès correspondantes affichées dans l'éditeur de politiques, comme décrit dans la section « Gestion des règles de politique d'accès adaptatif ».
Les détails relatifs aux indicateurs de risque sont décrits dans la section « Indications de risque ».
Les indicateurs clés des données sur les risques sont structurés comme JSON et sont illustrés dans l'exemple suivant. Vous pouvez accéder à cette structure JSON à l'aide de la fonction risk.getAdaptiveSessionData().
L'utilisation de la fonction risk.getRawAdaptiveSessionData() permet d'accéder à la réponse complète des données de risque adaptatives liées à la session utilisateur.
{
"riskLevel": "LOW",
"isNewDevice": false,
"isRiskyDevice": false,
"isRiskyConnection": false,
"remoteIP": "122.143.222.333",
"country": "ISR",
"city": "Jerusalem",
"isp": "013 Netvision",
"isNewLocation": false,
"behavioralAnomaly": false,
"userBehavioralScore":"100"
}
| Syntaxe | Descriptif | Exemples |
|---|---|---|
risk.getAdaptiveSessionLevel() |
La fonction renvoie le niveau de risque adaptatif de la session utilisateur. |
Résultat :
|
risk.getAdaptiveSessionData() |
Renvoie un tableau JSON des données de risque adaptatif associées à la session utilisateur. Les propriétés qui ont le préfixe is renvoient une valeur booléenne. Toutes les autres renvoient une chaîne. |
Résultat : "behavioralAnomaly":false, "city":"Bundall", "country":"AUS", "isNewDevice":false, "isNewLocation":false, "isRiskyConnection":false, "isRiskyDevice":false, "isp":"Network Technology (AUST) P/L", "remoteIP":"120.29.43.158", "riskLevel":"LOW", "userBehavioralScore":"100" |
risk.getAdaptiveSessionData().($p) |
La fonction renvoie la propriété $p correspondante à partir du risk.getAdaptiveSessionData(). |
Résultat : true
Résultat :
|
string.Par exemple :
Pour renvoyer une valeur de type risk_score chaîne de caractères à des fins d'évaluation dans une politique d'accès, il faut d'abord la convertir en chaîne de caractères.
string(risk.getRawAdaptiveSessionData()[1].message.pinpoint_assessment.risk.risk_score)
Pour effectuer une opération ou une évaluation mathématique ou logique dans une règle avancée, un numéro JSON doit d'abord être transtypé vers un int
int(risk.getRawAdaptiveSessionData()[1].message.pinpoint_assessment.risk.risk_score) > 900ou évalué comme un double risk.getRawAdaptiveSessionData()[1].message.pinpoint_assessment.risk.risk_score > 900.0
Application
Dans certains cas d'utilisation (provisionnement et rapprochement), l'objet app peut être utilisé dans les règles CELx. Cet objet représente le JSON de l'application utilisé pour la synchronisation des comptes.
app objet peut être traité comme une carte à part entière dans la règle et dispose également des méthodes d'aide suivantes.| Syntaxe | Descriptif | Exemples |
|---|---|---|
app.getSupportingData() |
Renvoie les données associées à l'application. |
Résultat :
|
OAuth
| Syntaxe | Descriptif | Exemples |
|---|---|---|
oauth.GetBearerToken($url, $clientId, $clientSecret) |
$clientIdLa fonction effectue une requête vers le point $url de terminaison de jeton spécifié en utilisant le type d'autorisation « client_credentials », en fournissant les paramètres ` clientId ` et ` clientSecret$clientSecret `, et renvoie le jeton d'accès en cas de réussite. |
Résultat :
|
Fonctions JWT
| Syntaxe | Descriptif | Exemples |
|---|---|---|
jwt.sign($payload, $headers) |
Cette fonction génère un jeton Web JSON (JWT) signé. La fonction prend deux paramètres :
Remarque : comportement par défaut :
|
Résultat :
|
Fonctions de débogage
Les fonctions de débogage permettent d'évaluer une expression tout en générant un journal de trace. Le journal de trace sera généré si une règle est exécutée alors que le mode de trace est activé. Pour plus d'informations sur l'activation du mode de trace et la consultation des journaux de trace, consultez la section « Paramètres de trace » dans les chapitres « Création d'un flux » et « Gestion de la vue de trace ».
| Syntaxe | Descriptif | Exemples |
|---|---|---|
debug($expr, $logString) |
$logStringÉvalue l'expression $expr et génère le journal de débogage.La fonction prend deux paramètres :
|
Résultat : jke.comLe journal de trace suivant sera également généré : « |
debug($expr, $logString, $metadata) |
Évalue l'expression $expr et génère le journal $logString de débogage avec les métadonnées personnalisées supplémentaires.La fonction prend trois paramètres :
|
Résultat : jke.comLe journal de trace suivant sera également généré : «
The email domain is jke.com» avec les champs de métadonnées suivants :
|
Fonctions de mise en cache
Les fonctions de mise en cache permettent d'exploiter la mémoire cache dans le service Rule. Il existe deux types de fonctions de mise en cache : celles basées sur la session et celles qui ne le sont pas. Les fonctions de mise en cache basées sur les sessions utilisent session, tandis que les fonctions de mise en cache non basées sur les sessions utilisent cache. Les valeurs stockées dans le cache à l'aide des fonctions de mise en cache basées sur la session sont associées à une session utilisateur.
La mémoire cache globale (session et hors session) est soumise à une limite de taille maximale. Cette limite peut varier en fonction de la configuration du locataire. Une fois le cache plein, toute tentative d'ajout d'une entrée dans le cache entraînera une erreur.
{
"isSuccessful": true/false, //indicates if the operation was successful or not
"value": "<string>", // the value obtained from the operation
"errorID": "<string>", // the error ID if any
"errorMessage": "<string>", // the error message if any
}
| Syntaxe | Descriptif | Exemples |
|---|---|---|
session.Set($key, $value $ttlSec) |
Enregistre dans le cache une valeur liée à la session de l'utilisateur. Cette fonction prend trois paramètres :
|
Résultat : {"result":{"isSuccessful":true}} |
session.Get($key) |
Récupère la valeur associée à la session utilisateur enregistrée $key dans le cache. |
Résultat :{"result":{"isSuccessful":true, "value": "user1@web.com"}} |
session.Delete($key) |
Supprime du cache la valeur associée à la session utilisateur avec le $key . |
Résultat : {"result":{"isSuccessful":true}} |
session.Exists($key) |
Vérifie si l'élément $key associé à une session utilisateur existe dans le cache. |
Résultat : {"result":{"isSuccessful":true, "value":"true"}} |
session.GetAndDelete($key) |
Récupère la valeur associée à la session utilisateur dans le $key cache et la supprime de celui-ci. |
Résultat : {"result":{"isSuccessful":true, "value": "user1@web.com"}} |
| Syntaxe | Descriptif | Exemples |
|---|---|---|
cache.Set($key, $value $ttlSec) |
Enregistre une valeur dans le cache. Cette fonction prend 3 paramètres :
|
Résultat : {"result":{"isSuccessful":true}} |
cache.Get($key) |
Récupère la valeur stockée $key dans le cache. |
Résultat :{"result":{"isSuccessful":true, "value": "DunderMifflin"}} |
cache.Delete($key) |
Supprime la valeur associée à $key du cache. |
Résultat : {"result":{"isSuccessful":true}} |
cache.Exists($key) |
Vérifie si l'élément $key existe dans le cache. |
Résultat : {"result":{"isSuccessful":true, "value":"true"}} |
cache.GetAndDelete($key) |
Récupère la valeur stockée $key dans le cache et la supprime de celui-ci. |
Résultat : {"result":{"isSuccessful":true, "value": "DunderMifflin"}} |
| Erreur | Résultat |
|---|---|
| La longueur de la clé dépasse la limite |
|
| La longueur de la valeur dépasse la limite |
|
| La clé n'est pas trouvée lors de la récupération de la clé dans le cache |
|
| Lorsque la limite du cache est dépassée |
|
Fonctions cachées
Utilisez les fonctions de gestion des secrets pour accéder aux secrets existants.| Syntaxe | Descriptif | Exemples |
|---|---|---|
secrets.get($group, $name) |
Obtenir le secret associé au groupe $group et au nom indiqués $name |
secrets.get("apiKeys", "testKey")Résultat : <the testKey secret in the apiKeys group> |
secrets.get($name) |
$nameRécupérez le secret portant le nom indiqué. Le groupe du secret sera le groupe par défaut « default ». |
secrets.get("testKey")Résultat : <the testKey secret in the default group> |