属性関数
構成 API のサンプルおよび構文を使用して、カスタム関数を作成できます。
概要
関数を使用して、シングル・サインオン認証トークンの形式で、またはアカウントのプロビジョニング時に属性値をアプリケーションに渡す前に、属性値を参照、変換、および結合します。 IBM® Verify関数からは、への認証に使用されるIDソースの認証情報、Cloud Directoryに保存されているユーザーオブジェクト(SCIM形式)、および任意の外部APIエンドポイントにアクセスできます。 例えば、formalDisplayNameという属性を固定値属性として作成し、user.name.givenNameとuser.name.familyNameを指定した方法で連結する関数を指定することができます。詳細なルール属性を設定するには、管理コンソールで に移動します。 その後、他のすべての属性タイプと同様に、アプリケーション設定でこれらの属性をマッピングします。
ドメインオブジェクト
「ドメイン・オブジェクト」という用語は、属性のカスタム関数でアクセスできるすべてのオブジェクトを示すための包括的な表現です。
- クラウド・ディレクトリー・ユーザー
認証を行う Verify ユーザーごとに、Cloud Directory にユーザーアカウントが作成されます。 このアカウントは SCIM オブジェクトとして表されます。 次の例では、以下のクラウド・ディレクトリー・ユーザー・アカウントが使用されています。
以下の SCIM オブジェクトがユーザー・アカウントです。{ "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 }hobbies注: SCIMオブジェクトには、2つのカスタム属性が定義されています。それらはcarと です。 これらの属性は、管理コンソールを使用して構成できるスキーマ拡張です。 Verify 値は、Users API を通じてユーザーオブジェクトに追加できます。構文 説明 例 user.$property$property にアクセスします。 .と[".."]の両方を使用できます。user.name.familyName + ", " + user.name["givenName"]結果:
Hill, Jessicauser.$values.filter(x, $condition)$values: 1 つのリスト。 filter関数は、$conditionに基づいて値を抽出します。user.emails.filter(x, x.type == "work")[0].value結果:
jessica@jke.comuser.getCustomValues($attrName)カスタム属性の値をリストとして取得する関数。 $attrName: ユーザーオブジェクト内の属性が存在しない場合、その属性の名前はnullを返します。user.getCustomValues("car")結果:
["Ford Mustang Mach-E","Maruti Suzuki 800"]user.getCustomValue($attrName)リスト内の最初のカスタム属性値を取得する関数。 $attrName: ユーザーオブジェクト内の属性名。その属性が存在しない場合は、空の文字列("")を返します。user.getCustomValue("hobbies")結果:
Readinguser.getManager()現在のユーザーのマネージャー情報を取得する関数。 この関数は、マネージャーのユーザー・アカウントを (SCIM オブジェクトとして) 返します。 ユーザーに対してマネージャーが指定されていない場合は、空の JSON オブジェクトが返されます。 マネージャーオブジェクトが返された場合、ユーザーオブジェクトと同様に使用できます。つまり、このオブジェクトに対してさまざまな関数を呼び出すことができます。 user.getManager().name.formatted結果:
Jacob Jonesuser.getRoles()現在のユーザーの権限を取得する関数。 この関数は、ユーザーの権限リストをJSONオブジェクトとして返します。 権限の一覧が返された場合、それをJSONオブジェクトとして使用できます。 user.getRoles().resources[0].name結果:
Basic accessuser.getFIDO2Registrations($search)現在のユーザーの FIDO2 登録情報を取得する関数。 この関数は、そのユーザーに紐づく FIDO2 の登録リストを返します。 検索パラメータ $searchは、必要に応じて指定することができます。 対応している検索パラメータについては、こちらをご覧ください: https://docs.verify.ibm.com/verify/reference/getfidoregistrations_v20user.getFIDO2Registrations("enabled=true").fido2[0].enabled結果:
trueuser.getFIDO2RegistrationByID($id)$idID が指定された現在のユーザーの FIDO2 登録情報を取得する関数。user.getFIDO2RegistrationByID("e8bf1dac-8245-452b-b7c4-8a700a1eb078").fido2[0].id結果:
e8bf1dac-8245-452b-b7c4-8a700a1eb078user.getDynamicGroups()現在のユーザーの動的グループを取得する関数。 この関数は、ユーザーの動的グループのリストをJSONオブジェクトとして返します。 user.getDynamicGroups().resources[0].name結果 :
Security department manager- ユーザー管理機能
Cloud Directory内のユーザーに対して読み取り、作成、更新の操作を行う必要がある場合、CELxでは以下の機能が利用可能です。
これらの関数の戻り値は、以下に定義するmapオブジェクトです。 これにより、CELx関数内でエラー処理を柔軟に行うことが可能になります。 が空文字列の場合error、操作は正常に完了したことを意味します。{ "result": <result of the operation>, "error": <error message, in case of failures> }構文 説明 例 findUsers($filter)この関数は、指定されたフィルタ条件に一致するユーザーのリストを返します。 $filter: GET Users API で定義されている形式に従って、照合条件を指定する文字列。 検索結果の表示件数には、最大10件という制限が設けられています。一致するユーザーが見つからない場合は、空のリストが返されます。
findUsers('emails ew "@jke.com"')findUsers($filter, $attributes)この関数は、指定されたフィルタ条件に一致するユーザーのリストを返します。 $attributes一致した各ユーザーについて、引数で指定された属性が返されます。$filter: 照合条件を定義する文字列。$attributes: 結果として返されるべき scimNames の文字列配列。GET Users API で定義されているクエリパラメータの形式を参照してください。 検索結果の表示件数には、最大10件という制限が設けられています。
一致するユーザーが見つからない場合は、空のリストが返されます。
findUsers('emails ew "@jke.com"', ["emails", "name.givenName"])findUsers($filter, $attributes, $count)この関数は、指定されたフィルタに一致するユーザーのリストを、最大$count件まで返します。 $attributes一致した各ユーザーについては、引数で指定された属性のみが返されます。$filter: 照合条件を定義する文字列。$attributes: 結果として返されるべき scimNames 型の文字列配列。$count: 返すユーザーの最大数を指定する整数。最大値は10です。 10を超える値は無視され、10に設定されます。 GET Users API で定義されているクエリパラメータの形式を参照してください。一致するユーザーが見つからない場合は、空のリストが返されます。
findUsers('emails ew "@jke.com"', ["emails", "name.givenName"], 3)findUser($filter)この関数は、指定されたフィルタに一致するユーザーを1人返します。 $filter: GET Users API で定義されている形式に従って、一致条件を指定する文字列。複数のユーザーが一致した場合、または一致するユーザーがいない場合、エラーが返されます。
findUser('emails eq "jessica@jke.com"')findUser($filter, $attributes)この関数は、指定されたフィルタに一致するユーザーを1人返します。 ユーザーは、引数 $attributesで指定された属性のみを返します。$filter: 照合条件を定義する文字列。$attributes: 結果として返されるべき scimNames の文字列配列。 GET Users API で定義されているクエリパラメータの形式を参照してください。複数のユーザーが一致した場合、または一致するユーザーがいない場合、エラーが返されます。
findUser('emails eq "jessica@jke.com"', ["emails", "name.givenName"])getUser($uid)$uidこの関数は、指定されたと関連付けられているユーザーを返します。 そのユーザーが存在しない場合、エラーが返されます。getUser("504K8664N6")createUser($m)この関数は、指定された属性値を持つユーザーを作成します。 $m: 属性ID/名称と、ユーザーにとって望ましい値の対応表。属性IDは、GET Attributes API のレスポンスで確認できます。 IDと属性名は、どちらを使っても構いません。
および
username属性の値はemail必須です。 その他の値は任意です。新しいユーザーのパスワードを指定するには、$m に「name
password」というプロパティを追加し、その値として平文のパスワードを設定してください。result成功した場合、作成されたユーザーSCIMオブジェクトが.で返されます。createUser({'3':'jessica@jke.com', 'userName':'Jessica', '3f31edcf-19e8-46a4-b87e-e50c25dc1358':'Manager', 'hobbies':['Reading', 'Swimming'], '6': 'Jessica', '7': 'Doe'})createUser($m, $opts)この関数は、指定された属性値と追加のオプションを使用してユーザーを作成します。 $m: 属性ID/名称と、ユーザーにとって望ましい値の対応表。$opts: ユーザー作成時に指定可能な追加オプションの一覧。属性IDは、GET Attributes API のレスポンスで確認できます。 IDと属性名は、どちらを使っても構いません。
および
username属性の値はemail必須です。 その他の値は任意です。 新しいユーザーのパスワードを指定するには、に$mプロパティを追加し、プロパティ名をpassword、値に平文のパスワードを設定してください。現在、$opts では以下のプロパティが使用可能です:
- notifyType : このプロパティは、ユーザーに送信する通知の種類を指定します。
EMAILデフォルトは. です。 - notifyPassword : ユーザーに送信される通知にユーザーのパスワードを含めるかどうかを示すブール値。
trueデフォルトは. です。NONEが に設定されている場合notifyType、この属性は適用されません。 - notifyManager : ユーザーのパスワードが設定または変更された際に、ユーザーのマネージャー(設定されている場合)へ通知を送信するかどうかを示すブール値。
falseデフォルト値は. です。NONEが に設定されている場合notifyType、この属性は適用されません。 - acceptInitialPassword : true に設定すると、初回ログイン時にユーザーがパスワードを変更する必要がなくなります。
result成功した場合、作成されたユーザーSCIMオブジェクトが.で返されます。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)この関数は、指定された属性値で指定されたユーザーを更新します。
$uid: 更新対象のユーザーのID。$m: 属性ID/名称と、ユーザーにとって望ましい値の対応表。属性IDは、GET Attributes API のレスポンスで確認できます。 IDと属性名は、どちらを使っても構いません。
更新が成功すると、結果として文字列が返されます
success。 userオブジェクトは返されません。updateUser('6050007SGF', {'3':'jessica@redbank.com', '3f31edcf-19e8-46a4-b87e-e50c25dc1358':'President', 'mobile_number': '502513585', 'work_country': 'Singapore'})- notifyType : このプロパティは、ユーザーに送信する通知の種類を指定します。
- ID ソースの資格情報
- Verifyユーザーが にログインすると、ID ソースの認証情報属性がログインセッションに追加され、カスタム関数からアクセスできるようになります。 ユーザーが SAML フェデレーテッド ID プロバイダーを使用してログインし、SAML アサーションに
userRolesという属性ステートメントが含まれていて、それがmarketingおよびhelpdeskに設定されているとします。idsuser属性は、ストリング・キーとストリング配列値を持つマップとして使用できます。 例えば、以下のとおりです。{ "userRoles": ["marketing", "helpdesk"], "displayName": ["Jessica J. Hill"], "phone": ["+12324321234"], "employeeId": "eid1234" }構文 説明 例 idsuser.$property$propertyにアクセスします。idsuserの値は、常にストリングの配列です。idsuser.userRoles[1]結果:
helpdeskidsuser.getValue($property)$propertyの値をストリングとして返します。 値の配列に複数の項目がある場合は、最初の項目が返されます。$propertyが存在しない場合は、空ストリングが返されます。idsuser.getValue('userRoles')結果:
"Marketing"idsuser.getValues($property)$propertyのすべての値をストリング配列として返します。$propertyが存在しない場合は、nilオブジェクトが返されます。idsuser.getValues('userRoles')結果:
["Marketing", "helpdesk]" - HTTP 要求コンテキスト
IBM Verifyユーザーが にログインすると、カスタム関数内で受信した HTTP リクエストのコンテキストにアクセスできます。 ユーザーが OAuth フローを使用してログインし、クライアントが
client-ipとuser-agentの情報を送信した場合、requestContextはその情報を抽出できます。 これを使用して外部エンドポイントにコールアウトし、ユーザーのリスク・スコアを判別できます。requestContextは、ストリング・キーとストリング配列値を持つマップとして使用できます。 例えば、以下のとおりです。{ "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"] }表 1. HTTP リクエストのコンテキスト 構文 説明 例 requestContext.$property$propertyにアクセスします。requestContextの値は、常にストリングの配列です。requestContext.devicePlatform[1]結果:
MACOSrequestContext.getValue($property)$propertyの値をストリングとして返します。 値の配列に複数の項目がある場合は、最初の項目が返されます。$propertyが存在しない場合は、空ストリングが返されます。requestContext.getValue('x-forwarded-for')結果:
116.15.12.181requestContext.getValues($property)$propertyのすべての値をストリング配列として返します。$propertyが存在しない場合は、Nil オブジェクトが返されます。requestContext.getValues('x-forwarded-for')結果:
["116.15.12.181"]- 属性コンテキスト
- コンテキスト・オブジェクトは、関数の作成時に使用できる属性の特定プロパティーのキーと値のペアを保持します。 これらのプロパティーの値は、その属性のルックアップのコンテキストでのみ有効です。 このオブジェクトには、
ctxキーを使用してアクセスできます。コンテキスト・オブジェクトでは、以下のプロパティーを使用できます。構文 説明 例 ctx.currentValueこの関数の実行前に評価された属性値にアクセスします。 この値のデータ型は、属性構成で指定します。 値をデータ型にキャストできない場合、この値はヌルに設定されます。 ctx.currentValue.toUpper
標準演算子
+、-、*、/、>、<などです。+を使用して、ストリングを連結できます。| 演算子 | 説明 | 例 |
|---|---|---|
== |
等しいかどうか比較 |
|
!= |
等しくないかどうか比較 |
|
|| |
論理 OR 比較 |
|
&& |
論理 AND 比較 |
|
[ ] |
マップ・アクセス |
|
+ |
連結および追加 (型に基づく) |
|
- |
減算 |
|
* |
乗算 |
|
/ |
除算 |
|
> |
条件より大 |
|
< |
条件より小 |
|
>= |
Greater than or equal to |
|
<= |
Less than or equal to |
|
? |
三項演算子 |
|
標準関数
| 構文 | 説明 | 例 |
|---|---|---|
$string.contains($fragment) |
$string の中に $fragment が含まれているかどうかを確認します。 |
結果: true |
$string.endsWith($fragment) |
$stringが $fragmentで終了するかどうかを検査します。 |
結果: false |
$string.matches($regex) |
$regexが$string内のパターンと一致するかどうかを検査します。 |
結果: false |
$string.toUpper() |
$stringを大文字に変換します。 |
結果: HELLO |
$string.toLower() |
$string を小文字に変換します。 |
結果: hello |
$string.base64Encode() |
Base64 encodes $string。 |
結果: aGVsbG8= |
$string.base64Decode() |
Base64 は$stringをデコードします。 |
結果: hello |
$string.base64URLEncode() |
Base64URL $string をエンコードします。 |
結果:
|
$string.base64URLDecode() |
Base64URL $string をデコードします。 |
結果:
|
$string.size() |
$stringのサイズ |
結果: 5 |
$string.substring($begin,$end) |
$begin index (including)と$end index (excluding)の間のストリングを返します。 |
結果: ell |
$string.split($delim) |
$delimによって分割されたストリングの配列を返します。 |
結果: ["h","llo"] |
$string.replaceAll($old,$new) |
$oldのすべてのオカレンスを$newに置き換えます。 |
結果: heppo |
$string.matchAndReplaceAll($regex, $newStr) |
$regexのすべての一致を$newStrに置き換えます。 |
結果: some-text |
$string.indexOf($str) |
$str. が最初に現れる位置のインデックスを返します。 |
結果: 2 |
$string.lastIndexOf($str) |
$str. が最後に現れた位置のインデックスを返します。 |
結果: 3 |
| 構文 | 説明 | 例 |
|---|---|---|
$values.size() |
リストのサイズ$values |
結果:
|
$values.filter(x, $condition) |
$valuesを$conditionでフィルタリングします。 |
結果:
|
$values.all(x, $condition) |
すべての$valuesが$conditionを満たすかどうかを検査します。 |
結果:
|
$values.exists(x, $condition) |
$conditionを満たす値があるかどうかを検査します。 |
結果:
|
$values.exists_one(x, $condition) |
$conditionを満たす値が 1 つだけあるかどうかを検査します。 |
結果:
|
$values.map(x, $op) |
各値に対して$opを実行します。 |
結果:
|
stringToJson($s) |
文字列 $s を JSON 配列に変換します。 |
結果:
|
jsonToString($json) |
リスト$jsonをストリングに変換します。 |
結果:
|
joinStrings($values, $s) |
リスト $ 値内のストリングを分離文字 $s と結合します。 |
結果:
|
$values.flatten() |
リストのリスト $values を単一のリストに変換します。 |
結果:
|
{
idsuser: {
"attr1":"value1",
"attr2":"value2"
}
}関数idsuser.exists(x, $condition)の場合、x は[ "attr1", "attr2" ]です。| 構文 | 説明 | 例 |
|---|---|---|
sha256($value) |
指定したストリングの sha256 ハッシュ値を計算します。 出力は、16進数の値を文字列で表したものです。 |
結果:
|
sha512($value) |
指定したストリングの sha512 ハッシュ値を計算します。 出力は、16進数の値を文字列で表したものです。 |
結果:
|
hmacSha1($value, $key) |
指定されたストリングについて、キー$keyを使用して HMAC-SHA1 値を計算します。 出力は、16進数の値を文字列で表したものです。 |
結果: |
| 構文 | 説明 | 例 |
|---|---|---|
base64ToHex($value) |
base64-encoded 形式の文字列 $value を16進数に変換します。 |
結果:
|
hexToBase64($value) |
16進数の値 $value を、 base64-encoded 形式の文字列に変換します。 |
結果:
|
base64URLEncodedToHex($value) |
base64URL-encoded 形式の文字列 $value を16進数に変換します。 |
結果:
|
hexToBase64URLEncoded($value) |
16進数の値 $value を、 base64URL-encoded 形式の文字列に変換します。 |
結果:
|
| 構文 | 説明 | 例 |
|---|---|---|
has($m.$p) |
マップ $m にプロパティ $p が含まれているか確認してください。 |
結果:
|
has($m, $p) |
マップ$mにプロパティー$pが含まれているかどうかを検査します。 これは、特殊文字(ドットなど)を含むプロパティ名の場合に便利です。 |
結果:
|
jsonToString($m) |
マップ $m を文字列に変換する |
結果:
|
stringToJson($s) |
文字 $s 列をマップに変換します。 |
結果:
|
jsonToFormURLEncoded($m, $doUrlEncode) |
マップ$mをフォームに変換します。 trueが に設定されている場合 $doUrlEncode 、フォームは URL エンコードされます。 |
結果:
|
$m.put($k, $v) |
型が文字列のキー $k `key` と、型がオブジェクトの値 $v `value` をマップ `$m` に追加します。 $v$kマップ $m にキーに対応する値がすでに存在していた場合、その値は新しい値に置き換えられます。 |
結果: "{"hello": "world", "key1": "value1"} |
$m.putAll($v) |
$mmap $v の内容を map に挿入します。 $v$vマップ $m に、マップ内に存在するキーに対する値が以前に存在していた場合、マップ $m 内の古い値は、マップ内の値に置き換えられます。 |
結果: "{"hello": "world", "key1": "value1", "test": true} |
$m.remove($k) |
マップ $m に文字列型のキー $k が存在する場合、そのマッピングを削除します。 |
結果: {"hello": "world"} |
$m.removeAll($l) |
$l マップ $m に指定されたキーのリストに対するすべてのマッピングが存在する場合、それらを削除します。 |
結果: {"hello": "world"} |
exists を使用してください。idsuser.exists(x, x == "ext:idsource_attr1")プロパティーが存在する場合はtrueを返し、存在しない場合はfalseを返します。| 構文 | 説明 | 例 |
|---|---|---|
now |
現在時刻のタイム・スタンプ・オブジェクトを返します。 |
結果: "2021-08-17T08:24:58Z" |
timestamp($s) |
入力文字列 $s を RFC3339 に基づいて変換し、タイムスタンプオブジェクトを返します。 |
結果:
|
$t.getDate() |
タイム・スタンプ$tの日付を整数の 1 ベースのインデックス付けとして返します。 |
結果: 17 |
$t.getDayOfMonth() |
タイム・スタンプ$tの日付を、ゼロ・ベースの整数のインデックス付けとして返します。 |
結果: 16 |
$t.getDayOfWeek() |
タイム・スタンプ$tの曜日を、ゼロを基準とした整数 (日曜日の場合) として返します。 |
結果: 2 |
$t.getDayOfYear() |
タイム・スタンプ$tから年間通算日を整数 (ゼロ・ベースの索引付け) として返します。 |
結果: 228 |
$t.getMonth() |
タイム・スタンプ$tの月を、ゼロ・ベースの整数のインデックス付けとして返します。 |
結果: 7 |
$t.getFullYear() |
タイム・スタンプ$tから年を整数として返します。 |
結果: 2021 |
$t.getHours() |
タイムスタンプ $t から時間を整数として返します。 |
結果: 8 |
$t.getMinutes() |
タイム・スタンプ$tから分を整数として返します。 |
結果: 24 |
$t.getSeconds() |
タイム・スタンプ$tから秒を整数として返します。 |
結果: 58 |
$t.getMilliseconds() |
タイム・スタンプ$tからミリ秒を整数として返します。 |
結果: 642 |
int($t) |
int64 タイムスタンプを、UNIX®エポックからの秒数に変換します。 |
結果: 1629188698 |
duration($d) |
期間$dは、秒単位の期間を示す「s」で終わるストリングとして指定する必要があります。 |
結果: "2021-08-17T09:24:58Z" |
formatTime($t, $s) |
タイム・スタンプ$tを$sの形式で返します。 は $s 、希望する形式で「Monday, 02-January-06 15:04:05 MST」という基準時刻を使用する必要があります。 |
結果:
|
| 構文 | 説明 | 例 |
|---|---|---|
encodeURI($uri) |
指定された文字列 $uri を URI としてエンコードした文字列を返します。 A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #このメソッドは、以下の文字を除くすべての文字をエスケープします:. |
結果: "test.html?name=J%C3%BCrgen&car=audi" |
decodeURI($uri) |
$uriエンコードされたURIをデコードした結果を文字列として返します。 |
結果: "test.html%3Fname%3DJ%C3%BCrgen%26car%3Daudi" |
encodeURIComponent($uri) |
指定された文字列 $uri を URI コンポーネントとしてエンコードした文字列を返します。 A-Z a-z 0-9 - _ . ! ~ * ' ( )このメソッドは、以下の文字を除くすべての文字をエスケープします:. |
結果: "test.html%3Fname%3DJ%C3%BCrgen%26car%3Daudi" |
decodeURIComponent($uri) |
$uriエンコードされたURIコンポーネントのデコード済みバージョンを表す文字列を返します。 |
結果: "test.html?name=Jürgen&car=audi" |
UUID関数
| 構文 | 説明 | 例 |
|---|---|---|
genUUID() |
RFC 4122 および DCE( 1.1: )認証およびセキュリティサービスに基づいて UUID を生成します。 |
結果: 4eb1a3f3-5461-4b91-8d69-69e25f2a1b6a |
型および変換関数
| 構文 | 説明 | 例 |
|---|---|---|
type($value) |
$value. の型を返します。 |
結果:
結果: "string" |
bool($string) |
文字列 $string をブール値に変換します。 "TRUE""true"の許容値は、 "True"true 、および です。
|
結果: true
結果: false |
bytes($string) |
文字列 $string をバイト列に変換します。 |
結果: "aGVsbG8=" |
double($value) |
値を double $value 型に変換します。 は $value 、int、uint、またはstringのいずれかの型である必要があります。 |
結果: 2.5
結果:
|
int($value) |
値を $value int 型に変換します。 は $value 、double、uint、string、enum、またはtimestampのいずれかの型である必要があります。 タイムスタンプが指定された場合、 Unix エポックに基づく秒単位の値が返されます。 |
結果:
結果:
結果: 123
結果: 1742801032 |
uint($value) |
値を $value 符号なし整数に変換します。 は $value 、double、int、またはstringのいずれかの型である必要があります。 |
結果: 3
結果: 123 |
string($value) |
値を文字列 $value に変換します。 は $value 、bool、int、uint、double、bytes、timestamp、またはdurationのいずれかの型である必要があります。 期間が指定された場合、その値は秒単位に変換され、秒の端数には「s」の接尾辞が付きます。 タイムスタンプが指定された場合、その値は RFC3339 形式に変換されます。 |
結果:
結果: "1234"
結果: "hello"
結果: "60.1s"
結果: "2025-03-24T07:42:51Z" |
HTTP クライアント
- コンシューマーによって許可ヘッダー・トークンを生成する必要があります。 例えば、関数に戻される、有効期間が長い API キーを使用できます。
| 構文 | 説明 | 例 |
|---|---|---|
hc.Get($url, $headers) |
ステータスコード、レスポンスヘッダー、およびレスポンス本文を返します。レスポンス本文は、コンテンツタイプが application/json の場合は JSON オブジェクトとして、それ以外のコンテンツタイプの場合は文字列として返されます。
|
結果:
|
hc.GetAsString($url, $headers) |
応答をシリアライズされたストリングとして返します。 API エンドポイントの$url: URLは、{"headerName":"headerVal"}という形式の完全な URL $headers: JSONオブジェクトでなければなりません。 |
結果:
|
hc.GetAsJson($url, $headers) |
応答を JSON オブジェクトとして解析します。 API エンドポイントの$url: URLは、{"headerName":"headerVal"}という形式の完全な URL $headers: JSONオブジェクトでなければなりません。 |
結果:
|
hc.Post($url, $headers, $body) |
状況コード、応答ヘッダー、および応答本体を返し、応答本体は、コンテンツ・タイプがapplication/jsonの場合は JSON オブジェクトとして返され、その他のコンテンツ・タイプの場合はストリングとして返されます。
|
結果:
|
hc.Patch($url, $headers, $body) |
ステータスコード、レスポンスヘッダー、およびレスポンス本文を返します。レスポンス本文は、コンテンツタイプが application/json の場合は JSON オブジェクトとして、それ以外のコンテンツタイプの場合は文字列として返されます。
|
結果:
|
hc.Put($url, $headers, $body) |
ステータスコード、レスポンスヘッダー、およびレスポンス本文を返します。レスポンス本文は、コンテンツタイプが application/json の場合は JSON オブジェクトとして、それ以外のコンテンツタイプの場合は文字列として返されます。
|
結果: {"statusCode": "200", "responseHeaders": {"header": ["value1", "value2"]}, "responseBody": {"message": "success"}} |
hc.Delete($url, $headers) |
ステータスコード、レスポンスヘッダー、およびレスポンス本文を返します。 コンテンツタイプが application/JSON の場合、レスポンスボディは JSON オブジェクトとして返され、それ以外のコンテンツタイプの場合は文字列として返されます。
{"headerName":"headerVal"} |
結果:
|
hc.Opts($options) |
$options: 8 フラグは現在サポートされています。
hcインスタンスで応答するため、GetAsJSONおよびGetAsStringを呼び出すことができます。 |
|
$protocol://$host[:$port]HTTP クライアントに指定するAPIエンドポイントの URL は、必ず「 URL 」という形式の完全なURLでなければなりません。- は
$protocol「http」または「https」のいずれかでなければなりません。 - は
$host完全修飾ドメイン名(FQDN)でなければなりません。 IPアドレスは使用できません。 - ポート番号
$portは任意です。 HTTP クライアントでは、以下のポートがサポートされています。 それ以外のポートを使用すると、タイムアウトが発生します。- ポート80、443、および8088
- ポート範囲 7000~7050
- ポート範囲 8000~8050
デフォルトのキャッシュ有効期限が 1 分の GET 呼び出し (GetAsStringおよびGetAsJSON) の場合、HTTP 応答キャッシュはデフォルトで有効になっています。 POST 呼び出しの場合は、デフォルトで無効になっています。 HTTP クライアント応答キャッシュのデフォルト設定をオーバーライドするには、フラグcacheをtrueまたはfalseのいずれかの値でhc.Optsに組み込む必要があります。 デフォルトでは、キャッシュの存続時間は 60 秒に設定されています。 デフォルトのキャッシュ存続時間をオーバーライドするには、フラグcacheExpiryを、最大 3600 秒 (1 時間) までの秒単位の値でhc.Optsに組み込む必要があります。
適応型のリスク
適応型アクセスのリスク関数を使用して、現在のユーザー・セッションのリスク・レベルおよび関連する許可データにアクセスできます。
適応型アクセス・ポリシーは、カスタム属性を使用してデータが取り込まれるようにする前に、セッション内で少なくとも 1 回評価する必要があります。そうしないと、値“NOT_AVAILABLE”が返されます。
「アダプティブ・アクセス」のリスク機能を使用すると、 「アダプティブ・アクセス」ポリシールールの管理で説明されているように、ポリシーエディタに表示される対応するアクセスポリシーの条件にアクセスできます。
リスク指標の詳細については、 「リスクの兆候」 に記載されています。
リスク・データの重要指標はJSONとして構造化されており、次の例で確認できます。 このJSON構造には、risk.getAdaptiveSessionData()関数でアクセスできます。
このrisk.getRawAdaptiveSessionData()関数を使うと、ユーザーセッションに関連する完全な適応リスクデータ応答にアクセスできます。
{
"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"
}
| 構文 | 説明 | 例 |
|---|---|---|
risk.getAdaptiveSessionLevel() |
この関数は、ユーザーセッションのアダプティブ・リスク・レベルを返します。 |
結果:
|
risk.getAdaptiveSessionData() |
ユーザー・セッションに関連する適応型リスク・データの JSON 配列を返します。 接頭部isを持つプロパティーは、ブール値を返します。 それ以外のプロパティーはストリングを返します。 |
結果: "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) |
risk.getAdaptiveSessionData()この関数は、から個々のプロパティ $p を返します。 |
結果: true
結果:
|
string注: アプリケーションの属性マッピングや、アクセスポリシーの評価におけるカスタム属性の条件設定で、抽出された適応型属性を使用する場合、データ型のキャストが必要になることがあります。これには、JSONからへの変換も含まれます。例:
アクセスポリシーでの評価のために文字列値を返すには、まずその risk_score 値を文字列にキャストする必要があります。
string(risk.getRawAdaptiveSessionData()[1].message.pinpoint_assessment.risk.risk_score)
Advancedルールで数学または論理演算または評価を実行するには、最初にJSON番号をintにキャストししなければなりません。
int(risk.getRawAdaptiveSessionData()[1].message.pinpoint_assessment.risk.risk_score) > 900または二重として評価されます。 risk.getRawAdaptiveSessionData()[1].message.pinpoint_assessment.risk.risk_score > 900.0
アプリケーション
特定のユースケース(プロビジョニングおよび照合)において、この app オブジェクトはCELxルール内で利用可能です。 このオブジェクトは、アカウントの同期に使用されているアプリケーションのJSONを表します。
app オブジェクトは、ルール内ではそれ自体がマップとして扱えるほか、以下のヘルパーメソッドも備えています。| 構文 | 説明 | 例 |
|---|---|---|
app.getSupportingData() |
アプリケーションの関連データを返します。 |
結果:
|
OAuth
| 構文 | 説明 | 例 |
|---|---|---|
oauth.GetBearerToken($url, $clientId, $clientSecret) |
$clientIdこの関数は、client_credentials グラントタイプを使用して指定された $url トークンエンドポイントにリクエストを送信し、 clientId および clientSecret$clientSecret を指定します。成功した場合、アクセストークンを返します。 |
結果:
|
JWTの機能
| 構文 | 説明 | 例 |
|---|---|---|
jwt.sign($payload, $headers) |
この関数は、署名付きJSON Webトークン(JWT)を生成します。 この関数は2つの引数を受け取ります:
注: デフォルトの動作:
|
結果:
|
デバッグ機能
デバッグ関数を使用すると、式を評価すると同時にトレースログを生成することができます。 トレースモードが有効になっている状態でルールが実行されると、トレースログが生成されます。 トレースモードの有効化やトレースログの表示に関する詳細については、 「フローの作成」 および 「トレースビューの管理」 の「トレース設定」を参照してください。
| 構文 | 説明 | 例 |
|---|---|---|
debug($expr, $logString) |
$logString式 $expr を評価し、デバッグログを生成します。この関数は2つの引数を受け取ります:
|
結果: jke.com以下のトレースログも生成されます:「 |
debug($expr, $logString, $metadata) |
式 $expr を評価し、追加のカスタムメタデータを含むデバッグログ $logString を生成します。この関数は3つの引数を受け取ります:
|
結果: jke.comまた、以下のトレースログも生成されます:「
The email domain is jke.com」には、以下のメタデータフィールドが含まれます:
|
キャッシュ関数
キャッシュ機能を使用すると、Ruleサービス内のキャッシュを活用できます。 キャッシュ機能には、セッションベースと非セッションベースの2種類があります。 cachesessionセッションベースのキャッシュ関数は を使用するのに対し、非セッションベースのキャッシュ関数は を使用します。 セッションベースのキャッシュ関数を使用してキャッシュに保存された値は、ユーザーセッションに関連付けられています。
キャッシュ全体(セッションおよび非セッション)には、最大サイズ制限があります。 この制限は、テナントの設定によって異なる場合があります。 キャッシュが満杯になると、キャッシュへのエントリ追加リクエストはすべてエラーとなります。
{
"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
}
| 構文 | 説明 | 例 |
|---|---|---|
session.Set($key, $value $ttlSec) |
ユーザーセッションに関連付けられた値をキャッシュに保存します。 この関数は3つの引数を受け取ります:
|
結果: {"result":{"isSuccessful":true}} |
session.Get($key) |
$key キャッシュ内のユーザーセッションに関連付けられた値を取得します。 |
結果:{"result":{"isSuccessful":true, "value": "user1@web.com"}} |
session.Delete($key) |
$key キャッシュから、ユーザーセッションに関連付けられた値を削除します。 |
結果: {"result":{"isSuccessful":true}} |
session.Exists($key) |
ユーザーセッションに関連付けられたデータ $key がキャッシュ内に存在するかどうかを確認します。 |
結果: {"result":{"isSuccessful":true, "value":"true"}} |
session.GetAndDelete($key) |
キャッシュ内の指定 $key されたユーザーセッションに関連付けられた値を取得し、キャッシュから削除します。 |
結果: {"result":{"isSuccessful":true, "value": "user1@web.com"}} |
| 構文 | 説明 | 例 |
|---|---|---|
cache.Set($key, $value $ttlSec) |
値をキャッシュに保存します。 この関数は3つの引数を受け取ります:
|
結果: {"result":{"isSuccessful":true}} |
cache.Get($key) |
$key キャッシュ内の値を取得します。 |
結果:{"result":{"isSuccessful":true, "value": "DunderMifflin"}} |
cache.Delete($key) |
キャッシュから を含む値を $key 削除します。 |
結果: {"result":{"isSuccessful":true}} |
cache.Exists($key) |
キャッシュにそのデータ $key が存在するかどうかを確認します。 |
結果: {"result":{"isSuccessful":true, "value":"true"}} |
cache.GetAndDelete($key) |
キャッシュ内の指定された $key 値を取得し、キャッシュから削除します。 |
結果: {"result":{"isSuccessful":true, "value": "DunderMifflin"}} |
| エラー | 結果 |
|---|---|
| キーの長さが制限を超えています |
|
| 値の長さが制限を超えています |
|
| キャッシュからキーを取得しようとした際、キーが見つかりません |
|
| キャッシュの制限を超えた場合 |
|
「Secrets」の機能
既存のシークレットにアクセスするには、シークレット関数を使用します。| 構文 | 説明 | 例 |
|---|---|---|
secrets.get($group, $name) |
指定されたグループ $group と名前で秘密情報を入手する $name |
secrets.get("apiKeys", "testKey")結果: <the testKey secret in the apiKeys group> |
secrets.get($name) |
$name指定された名前の秘密を取得します。 「secret」グループは、デフォルトのグループ「default」となります。 |
secrets.get("testKey")結果: <the testKey secret in the default group> |