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.
Remarque : la syntaxe de la fonction s'inspire du C et d' JavaScript™. Il repose toutefois sur un langage d'expression à ligne unique, l'extension du langage d'expression commun d' Google.

Pour configurer les attributs avancés des règles, accédez à Répertoire > Attributs 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 : car et hobbies. 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.$property Accédez à $property. . et [".."] peuvent être utilisés.
user.name.familyName + ", " + user.name["givenName"]

Résultat :

Hill, Jessica
user.$values.filter(x, $condition) $values : Une liste. La fonction filter extrait des valeurs basées sur $condition.
user.emails.filter(x, x.type == "work")[0].value

Résultat :

jessica@jke.com
user.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 :

Reading
user.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.formatted

Résultat :

Jacob Jones
user.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].name

Résultat :

Basic access
user.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 $search de recherche. Vous trouverez ici la liste des paramètres de recherche pris en charge : https://docs.verify.ibm.com/verify/reference/getfidoregistrations_v20
user.getFIDO2Registrations("enabled=true").fido2[0].enabled

Résultat :

true
user.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].id

Résultat :

e8bf1dac-8245-452b-b7c4-8a700a1eb078
user.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].name

Ré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. error Une 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 email attributs et username sont 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 password est 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 email attributs et username sont obligatoires. Les autres valeurs sont facultatives. Pour définir le mot de passe du nouvel utilisateur, ajoutez une propriété dans $m portant le nom password et 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 si notifyType est défini sur NONE.
  • 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 si notifyType est défini sur NONE.
  • 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 success une 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'})
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 userRoles et définie sur marketing et helpdesk.
L'attribut idsuser est 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.$property Accédez à $property. La valeur de idsuser est toujours un tableau de chaînes.
idsuser.userRoles[1]

Résultat :

helpdesk
idsuser.getValue($property) Renvoie la valeur de $property sous forme de chaîne. Si le tableau de valeurs comporte plusieurs entrées, le premier élément est renvoyé. Si $property n'existe pas, une chaîne vide est renvoyée.
idsuser.getValue('userRoles') 

Résultat :

"Marketing"
idsuser.getValues($property) Renvoie toutes les valeurs de $property sous forme de tableau de chaînes. Si $property n'existe pas, un objet nil est 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-ip et user-agent , requestContext peut extraire les informations. Il peut être utilisé pour appeler un noeud final externe pour déterminer le score de risque de l'utilisateur.

requestContext est 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.$property Accédez à $property. La valeur de requestContext est toujours un tableau de chaînes.
requestContext.devicePlatform[1]

Résultat :

MACOS
requestContext.getValue($property) Renvoie la valeur de $property sous forme de chaîne. Si le tableau de valeurs comporte plusieurs entrées, le premier élément est renvoyé. Si $property n'existe pas, une chaîne vide est renvoyée.
requestContext.getValue('x-forwarded-for')

Résultat :

116.15.12.181
requestContext.getValues($property) Renvoie toutes les valeurs de $property sous forme de tableau de chaînes. Si $property n'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.currentValue Accé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

Les opérateurs pris en charge dans les fonctions d'attribut incluent la liste standard disponible dans tout langage de programmation. Par exemple, +, -, *, /, >, <. + peut être utilisé pour concaténer des chaînes.
Opérateur Descriptif Exemples
== Egal à
user.name.givenName == "Jessica"
!= Différent de
idsuser.myroles[0] == "marketing"
|| Opérateur de comparaison logique AND
user.name.givenName == "Jessica" || user.name.formatted.startsWith("Hill")
&& Opérateur de comparaison logique AND
1 == 1 && 2 == 2
[ ] Accès de mappe
user["name"]["givenName"]
+ Concaténation et ajout, en fonction du type
"Hello" + " " + "World"
- Soustraction
10 - 5
* Multiplication
5 * 2
/ Département
20 / 4
> Supérieur à
1 > 2
< Inférieur à
1 < 2
>= Supérieur ou égal à
1 >= 1
<= Inférieur ou égal à
1 <= 1
? Opérateur ternaire if
a == b ? true : false

Fonctions standard

Les fonctions d'attribut peuvent utiliser des fonctions standard pour effectuer des tâches, telles que la manipulation de valeurs d'attribut et l'accès aux éléments d'une liste.
Tableau 2. Fonctions de chaîne
Syntaxe Descriptif Exemples
$string.contains($fragment) Vérifie si $fragment se trouve dans $string.
"helloworld".contains("hello")

Résultat :

true
$string.endsWith($fragment) Vérifie si $string se termine par $fragment.
"hello world".endsWith("old")

Résultat :

false
$string.matches($regex) Vérifie si $regex correspond au modèle dans $string.
"foo".matches("k.*")

Résultat :

false
$string.toUpper() Convertit $string en majuscules.
"hello".toUpper()

Résultat :

HELLO
$string.toLower() Convertit $string en caractères minuscules.
"HEllO".toLower()

Résultat :

hello
$string.base64Encode() Base64 code $string.
"hello".base64Encode()

Résultat :

aGVsbG8=
$string.base64Decode() Base64 décode $string.
"aGVsbG8=".base64Decode()

Résultat :

hello
$string.base64URLEncode() Base64URL encode $string.
"hello_world!".base64URLEncode()

Résultat :

aGVsbG9fd29ybGQh

$string.base64URLDecode() Base64URL décode $string.
"aGVsbG9fd29ybGQh".base64URLDecode()

Résultat :

hello_world!

$string.size() Taille de $string
"hello".size()

Résultat :

5
$string.substring($begin,$end) Renvoie la chaîne entre $begin index (including) et $end index (excluding).
"hello".substring(1,4)

Résultat :

ell
$string.split($delim) Retourne le tableau des chaînes qui sont divisées par le $delim.
"hello".split("e")

Résultat :

["h","llo"]
$string.replaceAll($old,$new) Remplace toutes les occurrences de $old par $new.
"hello".replaceAll("l","p")

Résultat :

heppo
$string.matchAndReplaceAll($regex, $newStr) Remplace toutes les correspondances de $regex avec $newStr.
"some12#$text".matchAndReplaceAll("[^a-zA-Z]+", "-")

Résultat :

some-text
$string.indexOf($str) Renvoie l'index de la première occurrence de $str.
"hello".indexOf("l")

Résultat :

2
$string.lastIndexOf($str) Renvoie l'index de la dernière occurrence de $str.
"hello".lastIndexOf("l")

Résultat :

3
Tableau 3. Fonctions de liste
Syntaxe Descriptif Exemples
$values.size() Taille de la liste $values
["hello", "world"].size()

Résultat :

2

$values.filter(x, $condition) Filtre $values par $condition.
["hello", "world", "helios"].filter(x,
            x.startsWith("hel"))

Résultat :

["hello", "helios"]

$values.all(x, $condition) Vérifie si toutes les $values satisfont $condition.
["hello", "world", "helios"].all(x,
            x.contains("hel"))

Résultat :

false

$values.exists(x, $condition) Vérifie si une valeur satisfait $condition.
["hello", "world", "helios"].exists(x,
            x.contains("hel"))

Résultat :

true

$values.exists_one(x, $condition) Vérifie si exactement une valeur satisfait $condition.
["hello", "world", "helios"].exists(x,
            x.contains("hel"))

Résultat :

false

$values.map(x, $op) Exécute $op sur chaque valeur.
["hello", "world", "helios"].map(x, x.toUpper())

Résultat :

["HELLO","WORLD","HELIOS"]

stringToJson($s) Convertit la chaîne $s en un tableau JSON.
stringToJson('[{\"hello\":\"world\"},{\"key\":\"value\"}]')

Résultat :

[{"hello":"world"},{"key":"value"}]

jsonToString($json) Convertit la liste $json en chaîne.
jsonToString(["hello","world","helios"])

Résultat :

"[\"hello\",\"world\",\"helios\"]

joinStrings($values, $s) Joint les chaînes dans la liste $values avec le séparateur $s.
joinStrings(['hello','world','helios'], ' + ')

Résultat :

"hello + world + helios"

$values.flatten() Convertit une liste de listes $values en une seule liste.
[[1,2],["a","b","c"]].flatten()

Résultat :

[1,2,"a","b","c"]

Remarque : vous pouvez également appliquer des fonctions de liste à des objets Map. La fonction s'exécute sur la liste des clés de la mappe. Par exemple, si l'entrée contient :
{
idsuser: {
"attr1":"value1",
"attr2":"value2"
}
}
alors pour la fonction idsuser.exists(x, $condition), x est [ "attr1", "attr2" ].
Tableau 4. Fonctions de hachage
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.
sha256('hello')

Résultat :

`2cf24dba...`

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.
sha512('hello')

Résultat :

`9b71d224...`

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.
hmacSha1('hello','key')

Résultat:b34ceac4516ff23a143e61d79d0fa7a4fbe5f266

Tableau 5. Hex/Base64 Fonctions
Syntaxe Descriptif Exemples
base64ToHex($value) Convertit la chaîne de caractères $value au format « base64-encoded » en une valeur hexadécimale.
base64ToHex('Gis8Tw==')

Résultat :

1a2b3c4f

hexToBase64($value) Convertit la valeur hexadécimale $value en une chaîne de caractères au format « base64-encoded ».
hexToBase64('1a2b3c4f')

Résultat :

Gis8Tw==

base64URLEncodedToHex($value) Convertit la chaîne de caractères $value au format « base64URL-encoded » en une valeur hexadécimale.
base64URLEncodedToHex('Gis8TV5v')

Résultat :

1a2b3c4d5e6f

hexToBase64URLEncoded($value) Convertit la valeur hexadécimale $value en une chaîne de caractères au format « base64URL-encoded ».
hexToBase64URLEncoded('1a2b3c4d5e6f')

Résultat :

Gis8TV5v

Tableau 6. Fonctions de mappage et d'objet
Syntaxe Descriptif Exemples
has($m.$p) Vérifie si la carte $m contient la propriété $p.
has({ "hello": "world" }.hello)

Résultat :

true

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).
has({ "email.address": "abc@email.com"}, "email.address")

Résultat :

true

jsonToString($m) Convertir la carte $m en chaîne de caractères
jsonToString({"hello":"world"})

Résultat :

"{\"hello\":\"world\"}"

stringToJson($s) Convertit la chaîne $s en une carte.
stringToJson("{\"hello\":\"world\"}")

Résultat :

{"hello": "world"}

jsonToFormURLEncoded($m, $doUrlEncode) Convertit la mappe $m en une forme. Si $doUrlEncode est défini sur true, le formulaire est encodé en format « URL ».
jsonToFormURLEncoded({'hello':'world', 'key1':'value 1'}, true)

Résultat :

"hello=world&key1=value+1"

$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.
{"hello": "world"}.put("key1",
    "value1")

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.
{"hello": "world"}.putAll({"key1": "value1", "test":
      true})

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.
{"hello": "world", "key1":
    "value1"}.remove("key1")

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.
{"hello": "world", "key1": "value1", "test":
      true}.removeAll(["key1", "test"])

Résultat :

{"hello": "world"}
Remarque : pour vérifier l'existence d'une propriété dont le nom contient des caractères réservés, utilisez la exists fonction List.
idsuser.exists(x, x == "ext:idsource_attr1")
Elle renvoie true si la propriété existe et false dans le cas contraire.
Tableau 7. Fonctions de date et d'heure
Syntaxe Descriptif Exemples
now Renvoie un objet d'horodatage de l'heure en cours.
now

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.
timestamp(1629188698)

Résultat :

"2021-08-17T08:24:58Z"

$t.getDate() Renvoie le jour du mois à partir de l'horodatage $t sous la forme d'un entier, avec une indexation à base un.
timestamp('2021-08-17T08:24:58Z').getDate()

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.
timestamp('2021-08-17T08:24:58Z').getDayOfMonth()

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.
timestamp('2021-08-17T08:24:58Z').getDayOfWeek()

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.
timestamp('2021-08-17T08:24:58Z').getDayOfYear()

Résultat :

228
$t.getMonth() Renvoie le mois de l'horodatage $t sous la forme d'un entier, avec une indexation à base zéro.
timestamp('2021-08-17T08:24:58Z').getMonth()

Résultat :

7
$t.getFullYear() Renvoie l'année à partir de l'horodatage $t sous la forme d'un entier.
timestamp('2021-08-17T08:24:58Z').getFullYear()

Résultat :

2021
$t.getHours() Renvoie les heures de l'horodatage $t sous forme d'entier.
timestamp('2021-08-17T08:24:58Z').getHours()

Résultat :

8
$t.getMinutes() Renvoie les minutes de l'horodatage $t sous la forme d'un entier.
timestamp('2021-08-17T08:24:58Z').getMinutes()

Résultat :

24
$t.getSeconds() Renvoie les secondes de l'horodatage $t sous la forme d'un entier.
timestamp('2021-08-17T08:24:58Z').getSeconds()

Résultat :

58
$t.getMilliseconds() Renvoie les millisecondes de l'horodatage $t sous la forme d'un entier.
timestamp('2021-08-17T08:24:58.642Z').getMilliseconds()

Résultat :

642
int($t) Convertit l'horodatage en int64 nombre de secondes depuis l'époque UNIX®.
int(timestamp('2021-08-17T08:24:58Z'))

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.
timestamp('2021-08-17T08:24:58Z') + duration('3600s')

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é.
formatTime(timestamp('2021-08-17T08:24:58Z'), 'Monday, 02-Jan-06 15:04:05 MST')

Résultat :

"Tuesday, 17-August-21 08:24:58 UTC"

Tableau 8. Fonctions d'encodage et de décodage URI
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 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #.
encodeURI('test.html?name=Jürgen&car=audi')

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é.
decodeURI('test.html?name=J%C3%BCrgen&car=audi')

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 - _ . ! ~ * ' ( ).
encodeURI('test.html?name=Jürgen&car=audi')

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é.
decodeURIComponent('test.html%3Fname%3DJ%C3%BCrgen%26car%3Daudi')

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é.
genUUID()

Résultat :

4eb1a3f3-5461-4b91-8d69-69e25f2a1b6a

Fonctions de type et de conversion

Syntaxe Descriptif Exemples
type($value) Renvoie le type de $value.
type(1234)

Résultat:"int"

type("hello")

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 false sont "false", "False", et "FALSE".

bool("true")

Résultat :

true

bool("FALSE")

Résultat :

false
bytes($string) Convertit la chaîne $string en octets.
bytes("Hello")

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.
double(10)/4.0

Résultat :

2.5

double("3.14")

Résultat :

3.14

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.
int(10.0/4)

Résultat :

2

int(3.14)

Résultat :

3

int("123")

Résultat :

123

int(now)

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.
uint(3.14)

Résultat :

3

uint("123")

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.
string(true)

Résultat :

"true"

string(1234)

Résultat :

"1234"
string(b'helllo')

Résultat :

"hello"
string(duration('1m100ms'))

Résultat :

"60.1s"

string(now)

Résultat :

"2025-03-24T07:42:51Z"

Client HTTP

Les fonctions d'attribut peuvent être créées pour appeler des noeuds finaux d'API externes afin d'obtenir des valeurs.
Remarque :
  • 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. $url: URL L'adresse de l'API doit être une adresse complète de type URL

{"headerName":"headerVal"}$headers: JSON objet dans le formulaire.

hc.Get("https://api.jke.com/resources/" + user.name.givenName, {"Authorization":"Some token"})

Résultat :

{"statusCode": "200", "responseHeaders": {"header": ["value1", "value2"]}, "responseBody": {"value":"someValue"}}

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"}.
hc.GetAsString("https://api.jke.com/resources/" + user.name.givenName, {"Authorization":"Some token"})

Résultat :

"{\"value\":\"someValue\"}"

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"}.
hc.GetAsJson("https://api.jke.com/resources/" + user.name.givenName, {"Authorization":"Some token"}).value

Résultat :

"someValue"

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.

$url - L' URL e du point de terminaison de l'API doit être une adresse URL complète.

$headers - Objet JSON sous la forme {"headerName":"headerVal"}

$body - Demande le corps sous la forme d'une chaîne.

hc.Post("https://api.jke.com/resources", {"Authorization": "Some token"}, "{\"key\":\"value\"}")

Résultat :

{"statusCode": "200", "responseHeaders": {"header": ["value1", "value2"]}, "responseBody": {"message": "success"}}

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.

$url: L'adresse URL du point de terminaison de l'API doit être une adresse URL complète.

$headers: objet JSON sous la forme {"headerName":"headerVal"}.

$body: corps de la requête sous forme de chaîne de caractères.

hc.Patch("https://api.jke.com/resources", {"Authorization": "Some token"}, "{\"key\":\"value\"}")

Résultat :

{"statusCode": "200", "responseHeaders": {"header": ["value1", "value2"]}, "responseBody": {"message": "success"}}

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.

$url: L'adresse URL du point de terminaison de l'API doit être une adresse URL complète.

$headers: objet JSON sous la forme {"headerName":"headerVal"}.

$body: corps de la requête sous forme de chaîne de caractères.

hc.Put("https://api.jke.com/resources", {"Authorization": "Some token"},
      "{\"key\":\"value\"}")

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.

$url: L' URL e du point de terminaison de l'API doit être une adresse URL complète.

$headers: L'objet JSON dans le formulaire

{"headerName":"headerVal"}
hc.Delete("https://api.jke.com/resources", {"Authorization": "Some token"})

Résultat :

{"statusCode": "200", "responseHeaders": {"header": ["value1", "value2"]}, "responseBody": {"message": "success"}}

hc.Opts($options) $options: Huit indicateurs sont actuellement pris en charge :
  1. insecure: Indique que la connexion SSL peut ne pas être sécurisée.
  2. certLabel: Libellé du certificat de signataire qui est téléchargé sur le titulaire de l'EC.
  3. tlsMinVersion: Version TLS minimale prise en charge. Les options disponibles sont TLSv1.0, TLSv1.1, TLSv1.2. Si cet indicateur n'est pas spécifié, TLSv1.2 est la version TLS minimale.
  4. followRedirects: Indique si le client HTTP suit les redirections. Si aucune valeur n'est spécifiée, la valeur par défaut est false.
  5. cache: Booléen indiquant si la réponse est mise en cache. La valeur par défaut est true pour les appels GET et la valeur par défaut est false pour les autres méthodes HTTP.
  6. cacheExpiry: Durée de vie de la réponse en cache en secondes, au maximum 1 heure (3600). Si la durée de vie n'est pas spécifiée, la valeur par défaut est 60 secondes.
  7. mtls : valeur booléenne indiquant si TLS mutuel doit être activé pour la demande. Si la valeur est définie sur True, les valeurs des indicateurs suivants sont ignorées : insecure, certLabel, tlsMinVersion, followRedirects.
  8. mtlsCert : libellé d'un certificat personnel existant à fournir pour la demande MTLS.
Cette fonction répond avec une instance hc, donc GetAsJSON et GetAsString peuvent être appelés.
hc.Opts({"certLabel": "jkeCA","insecure":false,
"tlsMinVersion":"TLSv1.2", "followRedirects":true,"cache":true,
"cacheExpiry":"1200"}).GetAsString(...)
Remarque : la taille du corps de la réponse est limitée à 4 Mo par requête.
URL Restrictions
L' URL e du point de terminaison API fournie au client HTTP doit être une adresse URL complète sous la forme $protocol://$host[:$port].
  1. Le protocole $protocol doit être soit « http », soit « https ».
  2. Le nom $host doit être un nom de domaine complet (FQDN). Les adresses IP ne sont pas autorisées.
  3. Le numéro $port de 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
Mise en cache des réponses du client HTTP

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.
risk.getAdaptiveSessionLevel()

Résultat :

"LOW"

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.
risk.getAdaptiveSessionData()

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().
risk.getAdaptiveSessionData().isRiskyDevice

Résultat :

true
risk.getAdaptiveSessionData().isp

Résultat :

"Network Technology (AUST) P/L”

Remarque : un transtypage peut s'avérer nécessaire lors de l'utilisation d'attributs adaptatifs extraits dans le mappage d'attributs pour les applications ou dans les conditions d'attributs personnalisés lors de l'évaluation des politiques d'accès, y compris lors de la conversion de JSON vers 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) > 900
ou é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.

Cet 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.
app.getSupportingData()

Résultat :

<JSON object representing supporting data>

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.
oauth.GetBearerToken("https://api.jke.com/token", "123456-abcd-efgh-9876-q1w2e3r4t5y6", "secret")

Résultat :

15PSJF576qi2LF658k30I1WLTwGOw2Vzage2AtiS

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 :
  • $payload: Ce champ contient la charge utile, qui doit être un objet JSON.
  • $headers: Cela comprend les en-têtes, tels que kid, typ, alg, etc. Le kid est le nom du certificat personnel chargé dans le tenant Verify.
Remarque : comportement par défaut :
  • Si kid n'est pas fourni dans les en-têtes, le certificat personnel par défaut du tenant est utilisé pour signer le JWT.
  • Si alg n'est pas fourni dans les en-têtes, le système utilise RS256 pour signer le JWT.
jwt.sign({'key1': 'value1', 'auth': ['lval3', 'lval4'], 'iat': 1696567390}, {'alg':'RS256','kid':'cert1'})

Résultat :

eyJhb...<truncated>...J6d5EzIU-ldnemMV75Q

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 :

  • $expr: L'expression à évaluer.
  • $logString: La chaîne de texte qui sera générée. Il peut s'agir d'une expression et doit toujours donner lieu à une chaîne de caractères. $logString doit contenir la chaîne $value, qui sert à remplacer la valeur obtenue lors de l'évaluation de $expr.
debug("jessica@jke.com".split("@")[1], "The email domain is $value")

Résultat :

jke.com

Le journal de trace suivant sera également généré : « The email domain is jke.com».

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 :

  • $expr: L'expression à évaluer.
  • $logString: La chaîne de texte qui sera générée. Il peut s'agir d'une expression et doit toujours donner lieu à une chaîne de caractères. $logString doit contenir la chaîne $value, qui sert à remplacer la valeur obtenue lors de l'évaluation de $expr.
  • $metadata: Les métadonnées personnalisées transmises avec le journal, qui se présentent sous la forme d'un tableau de paires clé-valeur. La valeur de chaque paire peut être une expression qui doit donner une chaîne de caractères.
debug("jessica@jke.com".split("@")[1], "The email domain is $value", {"flow":
      "login", "time": string(now)})

Résultat :

jke.com
Le journal de trace suivant sera également généré : « The email domain is jke.com» avec les champs de métadonnées suivants :
  • "flow": "login"
  • "time": "< timestamp >"

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.

Le résultat des fonctions de mise en cache se présente sous la forme suivante :
{
  "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
}
Tableau 9. Fonctions de mise en cache basées sur la session
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 :

  • $key: la clé utilisée dans le cache. Il peut s'agir d'une expression et doit toujours donner lieu à une chaîne de caractères. La longueur maximale de cette clé est de 16 caractères.
  • $value: la valeur à enregistrer. Il peut s'agir d'une expression et doit toujours donner lieu à une chaîne de caractères. La longueur maximale de cette valeur est de 1 000 000 caractères.
  • $ttlSec: la durée de vie de la valeur. La valeur maximale est de 28 800.
session.Set("computedID", "user1@web.com", "1200")
Résultat :

{"result":{"isSuccessful":true}}
session.Get($key) Récupère la valeur associée à la session utilisateur enregistrée $key dans le cache.
session.Get("computedID")
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 .
session.Delete("computedID")
Résultat :

{"result":{"isSuccessful":true}}
session.Exists($key) Vérifie si l'élément $key associé à une session utilisateur existe dans le cache.
session.Exists("computedID")
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.
session.GetAndDelete("computedID")
Résultat :

{"result":{"isSuccessful":true, "value": "user1@web.com"}}
Tableau 10. Fonctions de mise en cache non liées à la session
Syntaxe Descriptif Exemples
cache.Set($key, $value $ttlSec) Enregistre une valeur dans le cache.
Cette fonction prend 3 paramètres :
  • $key: la clé utilisée dans le cache. Il peut s'agir d'une expression et doit toujours donner lieu à une chaîne de caractères. La longueur maximale de cette clé est de 16 caractères.
  • $value: la valeur à enregistrer. Il peut s'agir d'une expression et doit toujours donner lieu à une chaîne de caractères. La longueur maximale de cette valeur est de 1 000 000 caractères.
  • $ttlSec: la durée de vie de la valeur. La valeur maximale est 604 800.
cache.Set("companyName", "DunderMifflin", "1200")

Résultat :

{"result":{"isSuccessful":true}}
cache.Get($key) Récupère la valeur stockée $key dans le cache.
cache.Get("companyName")
Résultat :

{"result":{"isSuccessful":true, "value": "DunderMifflin"}}
cache.Delete($key) Supprime la valeur associée à $key du cache.
cache.Delete("companyName")
Résultat :

{"result":{"isSuccessful":true}}
cache.Exists($key) Vérifie si l'élément $key existe dans le cache.
cache.Exists("companyName")
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.
cache.GetAndDelete("companyName")
Résultat :

{"result":{"isSuccessful":true, "value": "DunderMifflin"}}
Tableau 11. Erreurs courantes
Erreur Résultat
La longueur de la clé dépasse la limite
{"error":{"messageId":"CSIBU2000E","messageDescription":"The length of the
              key provided exceeds the character limit of [16]."}}}
La longueur de la valeur dépasse la limite
{"error":{"messageId":"CSIBU2000E","messageDescription":The length of the
              value provided for the key [exampleKey] exceeds the character limit of
              [1000000]."}}}
La clé n'est pas trouvée lors de la récupération de la clé dans le cache
{"result":{"errorID":"CSIBU2040E","errorMessage":"Failed to get a value from
              the cache with the key [exampleKey].","isSuccessful":false}}
Lorsque la limite du cache est dépassée
{"error":{"messageId":"CSIBU2000E","messageDescription":"Cache limit has
              been exceeded."}}

Fonctions cachées

Utilisez les fonctions de gestion des secrets pour accéder aux secrets existants.
Remarque : les variables masquées dans les expressions CELx ( VDEV_66277 ) peuvent être activées sur demande. Pour demander cette fonctionnalité, veuillez contacter votre représentant commercial IBM ou votre interlocuteur IBM et lui faire part de votre souhait de bénéficier de cette fonctionnalité. Si vous êtes autorisé à créer un ticket d'assistance, veuillez en créer un en indiquant comme objet « secrets dans les expressions CELx ». IBM Verify Les abonnements d'essai ne permettent pas de créer des tickets d'assistance.
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>