속성 기능

구성 API 샘플 및 구문을 사용하여 사용자 정의 함수를 작성할 수 있습니다.

개요

속성 값을 싱글 사인온 인증 토큰 양식으로 애플리케이션에 전달하기 전에 또는 계정을 프로비저닝할 때 함수를 사용하여 속성 값을 참조, 변환 및 결합할 수 있습니다. 함수는 IBM® Verify에 대해 인증하는 데 사용되는 ID 소스 증명서에 액세스할 수 있습니다. 이 증명서는 클라우드 디렉토리 및 외부 API 엔드포인트에 저장된 사용자 오브젝트(SCIM 양식)입니다. 예를 들어, formalDisplayName(이)라는 속성을 고정 값 속성으로 작성할 수 있으며 지정된 방식으로 user.name.givenNameuser.name.familyName을(를) 연결하는 함수를 지정할 수 있습니다.
참고: 이 함수의 구문은 C 및 C++( JavaScript™ ) 스타일과 유사합니다. 하지만 이는 단일 행 표현 언어인 C# 공통 표현 언어 확장( Google )을 기반으로 합니다.

고급 규칙 속성을 구성하려면 관리 콘솔에서 디렉터리 > 속성 으로 이동하십시오. 그런 다음 다른 모든 속성 유형을 매핑하는 것과 마찬가지로 애플리케이션 구성에서 이러한 속성을 매핑하십시오.

도메인 객체

용어, 도메인 오브젝트는 속성의 사용자 정의 함수에서 액세스할 수 있는 가능한 모든 오브젝트를 표시하는 데 사용되는 캐치올 구문입니다.

Cloud Directory 사용자

Verify에 대해 인증하는 모든 사용자에 대해 사용자 계정이 클라우드 디렉토리에 작성됩니다. 이 계정은 SCIM 오브젝트로 표시됩니다. 다음 예제에서 다음 Cloud Directory 사용자 계정이 사용됩니다.

다음 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
}
참고: SCIM 객체에는 두 개의 사용자 정의 속성인 carhobbies가 정의되어 있습니다. 이러한 속성은 관리 콘솔을 통해 구성할 수 있는 스키마 확장입니다. 사용자 객체에는 Users API를 Verify 통해 값을 추가할 수 있습니다.
구문 설명
user.$property $property에 액세스하십시오. .[".."] 둘 다 사용할 수 있습니다.
user.name.familyName + ", " + user.name["givenName"]

결과:

Hill, Jessica
user.$values.filter(x, $condition) $values: 목록입니다. filter 함수는 $condition을(를) 기반으로 값을 추출합니다.
user.emails.filter(x, x.type == "work")[0].value

결과:

jessica@jke.com
user.getCustomValues($attrName) 사용자 정의 속성 값을 목록으로 반환하는 함수. $attrName: 사용자 객체의 속성이 존재하지 않으면 해당 속성의 이름이 null을 반환합니다.
user.getCustomValues("car")

결과:

["Ford Mustang Mach-E","Maruti Suzuki 800"]
user.getCustomValue($attrName) 목록에서 첫 번째 사용자 정의 속성 값을 가져오는 함수. $attrName: 사용자 객체 내 속성의 이름입니다. 해당 속성이 존재하지 않으면 빈 문자열("")을 반환합니다.
user.getCustomValue("hobbies")

결과:

Reading
user.getManager() 현재 사용자의 관리자 정보를 가져오는 함수. 함수는 관리자의 사용자 계정을 리턴합니다(SCIM 오브젝트로). 사용자에 대한 관리자가 지정되지 않은 경우 비어 있는 JSON 오브젝트를 리턴합니다. 매니저 객체가 반환되면, 이 객체는 사용자 객체와 마찬가지로 사용할 수 있으며, 즉 이 객체에 대해 다양한 함수를 호출할 수 있습니다.
user.getManager().name.formatted

결과:

Jacob Jones
user.getRoles() 현재 사용자의 권한을 가져오는 함수. 이 함수는 사용자의 권한 목록을 JSON 객체 형태로 반환합니다. 권한 목록이 반환되면, 이를 JSON 객체로 사용할 수 있습니다.
user.getRoles().resources[0].name

결과:

Basic access
user.getFIDO2Registrations($search) 현재 사용자의 FIDO2 등록 내역을 가져오는 함수입니다. 이 함수는 해당 사용자에게 등록된 ‘ FIDO2 ’ 목록을 반환합니다. 검색 매개변수는 $search 선택적으로 지정할 수 있습니다. 지원되는 검색 매개변수는 다음에서 확인할 수 있습니다: https://docs.verify.ibm.com/verify/reference/getfidoregistrations_v20
user.getFIDO2Registrations("enabled=true").fido2[0].enabled

결과:

true
user.getFIDO2RegistrationByID($id) $idID가.인 현재 사용자의 FIDO2 등록 정보를 가져오는 함수입니다.
user.getFIDO2RegistrationByID("e8bf1dac-8245-452b-b7c4-8a700a1eb078").fido2[0].id

결과:

e8bf1dac-8245-452b-b7c4-8a700a1eb078
user.getDynamicGroups() 현재 사용자의 동적 그룹을 가져오는 함수. 이 함수는 사용자의 동적 그룹 목록을 JSON 객체 형태로 반환합니다.
user.getDynamicGroups().resources[0].name

결과 :

Security department manager

사용자 관리 기능

Cloud Directory의 사용자에 대해 읽기, 생성 및 업데이트 작업을 수행해야 하는 경우, CELx에서 다음 기능을 사용할 수 있습니다.

이 함수들의 반환값은 아래에 정의된 것과 같은 맵 객체입니다. 이를 통해 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) 이 함수는 지정된 필터 조건에 맞는 단일 사용자를 반환합니다.

$filter: GET Users API 에 정의된 형식에 따라 일치 조건을 지정하는 문자열입니다.

일치하는 사용자가 여러 명인 경우나 일치하는 사용자가 없는 경우 오류가 반환됩니다.

findUser('emails eq "jessica@jke.com"')
findUser($filter, $attributes) 이 함수는 지정된 필터 조건에 맞는 단일 사용자를 반환합니다. 사용자는 인자에 $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와 속성명은 서로 바꿔서 사용할 수 있습니다.

emailusername 속성 값은 필수입니다. 나머지 값들은 선택 사항입니다.

새 사용자의 비밀번호를 지정하려면 $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와 속성명은 서로 바꿔서 사용할 수 있습니다.

emailusername 속성 값은 필수입니다. 나머지 값들은 선택 사항입니다. 새 사용자의 비밀번호를 지정하려면, 파일에 $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와 속성명은 서로 바꿔서 사용할 수 있습니다.

업데이트가 성공하면 결과로 string을 반환합니다 success . 사용자 객체는 반환되지 않습니다.

updateUser('6050007SGF', {'3':'jessica@redbank.com', '3f31edcf-19e8-46a4-b87e-e50c25dc1358':'President', 'mobile_number': '502513585', 'work_country': 'Singapore'})
ID 소스 인증 정보
사용자가 Verify에 로그인하면, ID 소스 증명서 속성이 로그인 세션에 추가되고 사용자 정의 함수에서 액세스할 수 있습니다. 사용자가 SAML 연합 ID 제공자를 사용하여 로그인하고 SAML 권한 정보에 userRoles(이)라는 속성 명령문이 포함되어 있으며 marketinghelpdesk(으)로 설정되었음을 고려하십시오.
idsuser 속성은 문자열 키 및 문자열 배열 값이 있는 맵으로 사용 가능합니다. 예를 들면 다음과 같습니다.
{
  "userRoles": ["marketing", "helpdesk"],
  "displayName": ["Jessica J. Hill"],
  "phone": ["+12324321234"],
  "employeeId": "eid1234"
}
구문 설명
idsuser.$property $property에 액세스하십시오. idsuser의 값은 항상 문자열 배열입니다.
idsuser.userRoles[1]

결과:

helpdesk
idsuser.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-ipuser-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]

결과:

MACOS
requestContext.getValue($property) $property의 값을 문자열로 리턴합니다. 값 배열에 여러 항목이 있는 경우 첫 번째 항목이 리턴됩니다. $property이(가) 존재하지 않으면 비어 있는 문자열이 리턴됩니다.
requestContext.getValue('x-forwarded-for')

결과:

116.15.12.181
requestContext.getValues($property) $property의 모든 값을 문자열 배열로 리턴합니다. $property이(가) 존재하지 않는 경우에는 nil 오브젝트가 리턴됩니다.
requestContext.getValues('x-forwarded-for')

결과:

["116.15.12.181"]
속성 컨텍스트
컨텍스트 오브젝트는 함수를 작성할 때 사용할 수 있는 속성의 특정한 특성에 대한 키/값 쌍을 보유합니다. 이러한 특성의 값은 해당 속성의 검색 컨텍스트에서만 유효합니다. 이 오브젝트는 ctx 키를 사용하여 액세스할 수 있습니다.
다음 특성은 컨텍스트 오브젝트로 사용 가능합니다.
구문 설명
ctx.currentValue 이 함수를 실행하기 전에 평가된 속성 값에 액세스하십시오. 이 값의 데이터 유형이 속성 구성에 지정됩니다. 값을 데이터 유형에 전달할 수 없는 경우 이 값은 널로 설정됩니다.
ctx.currentValue.toUpper

표준 연산자

속성 함수에 지원되는 연산자에는 프로그래밍 언어에서 사용 가능한 표준 목록이 포함됩니다. 예를 들어, +, -, *, /, >, <입니다. +을(를) 사용하여 문자열을 연결할 수 있습니다.
연산자 설명
== 같음 비교
user.name.givenName == "Jessica"
!= 같지 않음 비교
idsuser.myroles[0] == "marketing"
|| 논리적 OR 비교
user.name.givenName == "Jessica" || user.name.formatted.startsWith("Hill")
&& 논리 AND 비교
1 == 1 && 2 == 2
[ ] 맵 액세스
user["name"]["givenName"]
+ 유형에 따른 연결 및 추가
"Hello" + " " + "World"
- 빼기
10 - 5
* 곱하기
5 * 2
/ 디비전
20 / 4
> 보다 큼 조건
1 > 2
< 보다 작음 조건
1 < 2
>= 보다 크거나 같음
1 >= 1
<= 보다 작거나 같음
1 <= 1
? 운영자인 경우 Ternary
a == b ? true : false

표준 함수

속성 함수는 표준 함수를 사용하여 목록에서 속성 값 처리 및 요소 액세스와 같은 태스크를 수행할 수 있습니다.
표 2. 문자열 함수
구문 설명
$string.contains($fragment) $string에서 $fragment가 발견되는지 확인합니다.
"helloworld".contains("hello")

결과:

true
$string.endsWith($fragment) $string이(가) $fragment(으)로 끝나는지 확인합니다.
"hello world".endsWith("old")

결과:

false
$string.matches($regex) $regex이(가) $string의 패턴과 일치하는지 확인합니다.
"foo".matches("k.*")

결과:

false
$string.toUpper() $string을(를) 대문자로 변환합니다.
"hello".toUpper()

결과:

HELLO
$string.toLower() $string을 소문자로 변환합니다.
"HEllO".toLower()

결과:

hello
$string.base64Encode() Base64는 $string을(를) 인코딩합니다.
"hello".base64Encode()

결과:

aGVsbG8=
$string.base64Decode() Base64는 $string을(를) 디코딩합니다.
"aGVsbG8=".base64Decode()

결과:

hello
$string.base64URLEncode() Base64URL $string을 인코딩합니다.
"hello_world!".base64URLEncode()

결과:

aGVsbG9fd29ybGQh

$string.base64URLDecode() Base64URL $string을 디코딩합니다.
"aGVsbG9fd29ybGQh".base64URLDecode()

결과:

hello_world!

$string.size() $string의 크기
"hello".size()

결과:

5
$string.substring($begin,$end) $begin index (including)과(와) $end index (excluding)사이의 문자열을 리턴합니다.
"hello".substring(1,4)

결과:

ell
$string.split($delim) $delim(으)로 분할된 문자열의 배열을 리턴합니다.
"hello".split("e")

결과:

["h","llo"]
$string.replaceAll($old,$new) $old의 모든 발생을 $new(으)로 바꿉니다.
"hello".replaceAll("l","p")

결과:

heppo
$string.matchAndReplaceAll($regex, $newStr) $regex의 모든 일치를 $newStr(으)로 바꿉니다.
"some12#$text".matchAndReplaceAll("[^a-zA-Z]+", "-")

결과:

some-text
$string.indexOf($str) $str.가 처음 나타나는 위치의 인덱스를 반환합니다.
"hello".indexOf("l")

결과:

2
$string.lastIndexOf($str) $str.의 마지막 출현 위치의 인덱스를 반환합니다.
"hello".lastIndexOf("l")

결과:

3
표 3. 목록 함수
구문 설명
$values.size() 목록의 크기 $values
["hello", "world"].size()

결과:

2

$values.filter(x, $condition) $condition(으)로 $values 필터합니다.
["hello", "world", "helios"].filter(x,
            x.startsWith("hel"))

결과:

["hello", "helios"]

$values.all(x, $condition) 모든 $values이(가) $condition을(를) 충족하는지 확인합니다.
["hello", "world", "helios"].all(x,
            x.contains("hel"))

결과:

false

$values.exists(x, $condition) 값이 $condition을(를) 충족하는지 확인합니다.
["hello", "world", "helios"].exists(x,
            x.contains("hel"))

결과:

true

$values.exists_one(x, $condition) 정확히 하나의 값이 $condition을(를) 충족하는지 확인합니다.
["hello", "world", "helios"].exists(x,
            x.contains("hel"))

결과:

false

$values.map(x, $op) 각 값에서 $op을(를) 실행합니다.
["hello", "world", "helios"].map(x, x.toUpper())

결과:

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

stringToJson($s) 문자열 $s를 JSON 배열로 변환합니다.
stringToJson('[{\"hello\":\"world\"},{\"key\":\"value\"}]')

결과:

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

jsonToString($json) 목록 $json을(를) 문자열로 변환하십시오.
jsonToString(["hello","world","helios"])

결과:

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

joinStrings($values, $s) 목록 $value에 있는 문자열을 구분 기호($value)로 결합합니다.
joinStrings(['hello','world','helios'], ' + ')

결과:

"hello + world + helios"

$values.flatten() 리스트의 리스트인 $values를 단일 리스트로 변환합니다.
[[1,2],["a","b","c"]].flatten()

결과:

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

참고: Map 객체에 대해서도 List 함수를 실행할 수 있습니다. 함수는 맵의 키 목록에 대해 실행됩니다. 예를 들어, 입력에 다음이 포함됩니다.
{
idsuser: {
"attr1":"value1",
"attr2":"value2"
}
}
함수 idsuser.exists(x, $condition)의 경우 x는 [ "attr1", "attr2" ]입니다.
표 4. 해시 함수
구문 설명
sha256($value) 지정된 문자열에 대한 sha256 해시 값을 계산합니다. 출력은 16진수 값을 문자열로 표현한 것입니다.
sha256('hello')

결과:

`2cf24dba...`

sha512($value) 지정된 문자열에 대한 sha512 해시 값을 계산합니다. 출력은 16진수 값을 문자열로 표현한 것입니다.
sha512('hello')

결과:

`9b71d224...`

hmacSha1($value, $key) 주어진 문자열에 대한 키 $key(으)로 HMAC-SHA1 값을 계산합니다. 출력은 16진수 값을 문자열로 표현한 것입니다.
hmacSha1('hello','key')

결과:b34ceac4516ff23a143e61d79d0fa7a4fbe5f266

표 5. Hex/Base64 기능
구문 설명
base64ToHex($value) base64-encoded 형 문자열 $value를 16진수 값으로 변환합니다.
base64ToHex('Gis8Tw==')

결과:

1a2b3c4f

hexToBase64($value) 16진수 값 $value를 base64-encoded 형식의 문자열로 변환합니다.
hexToBase64('1a2b3c4f')

결과:

Gis8Tw==

base64URLEncodedToHex($value) base64URL-encoded 형 문자열 $value를 16진수 값으로 변환합니다.
base64URLEncodedToHex('Gis8TV5v')

결과:

1a2b3c4d5e6f

hexToBase64URLEncoded($value) 16진수 값 $value를 base64URL-encoded 형식의 문자열로 변환합니다.
hexToBase64URLEncoded('1a2b3c4d5e6f')

결과:

Gis8TV5v

표 6. 맵 및 객체 함수
구문 설명
has($m.$p) 지도 $m에 속성 $p가 포함되어 있는지 확인하십시오.
has({ "hello": "world" }.hello)

결과:

true

has($m, $p) $m$p특성이 포함되어 있는지 확인합니다. 이는 특수 문자(예: 점)가 포함된 속성 이름의 경우 편리합니다.
has({ "email.address": "abc@email.com"}, "email.address")

결과:

true

jsonToString($m) 지도를 $m 문자열로 변환하세요
jsonToString({"hello":"world"})

결과:

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

stringToJson($s) 문자열을 $s 맵으로 변환합니다.
stringToJson("{\"hello\":\"world\"}")

결과:

{"hello": "world"}

jsonToFormURLEncoded($m, $doUrlEncode) $m을(를) 양식으로 변환합니다. true가 로 설정된 경우 $doUrlEncode , 양식은 URL 형식으로 인코딩됩니다.
jsonToFormURLEncoded({'hello':'world', 'key1':'value 1'}, true)

결과:

"hello=world&key1=value+1"

$m.put($k, $v) 맵 $m에 string 형식의 키와 object 형식의 값을 $v 가진 항목을 $k 삽입합니다. $v$k맵에 $m 해당 키에 대한 값이 이미 존재했다면, 기존 값은 새 값으로 대체됩니다.
{"hello": "world"}.put("key1",
    "value1")

결과:

"{"hello": "world", "key1": "value1"}
$m.putAll($v) $m맵의 $v 내용을 맵에 삽입합니다. $v$v만약 맵에 $m 이미 해당 키에 대한 값이 존재했다면, 맵에 있던 기존 값은 맵에 $m 있는 값으로 대체됩니다.
{"hello": "world"}.putAll({"key1": "value1", "test":
      true})

결과:

"{"hello": "world", "key1": "value1", "test": true}
$m.remove($k) $m 에 string 형식의 키 $k 에 대한 매핑이 존재할 경우 이를 제거합니다.
{"hello": "world", "key1":
    "value1"}.remove("key1")

결과:

{"hello": "world"}
$m.removeAll($l) $m$l 맵에 해당 키 목록에 대한 매핑이 존재할 경우, 이를 모두 제거합니다.
{"hello": "world", "key1": "value1", "test":
      true}.removeAll(["key1", "test"])

결과:

{"hello": "world"}
참고: 이름에 문자를 할당하는 속성이 있는지 확인하려면 List 함수를 exists 사용하십시오.
idsuser.exists(x, x == "ext:idsource_attr1")
특성이 존재하는 경우 true을(를) 리턴하고 그렇지 않으면 false을(를) 리턴합니다.
표 7. 타임스탬프 함수
구문 설명
now 현재 시간의 시간소인 오브젝트를 리턴합니다.
now

결과:

"2021-08-17T08:24:58Z"
timestamp($s) 입력 문자열 $s를 RFC3339 에 따라 변환하여 타임스탬프 객체를 반환합니다.
timestamp(1629188698)

결과:

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

$t.getDate() 시간소인 $t에서 정수, 하나의 기반 색인화로 해당 월의 일을 리턴합니다.
timestamp('2021-08-17T08:24:58Z').getDate()

결과:

17
$t.getDayOfMonth() 시간소인 $t에서 정수, 0기반 색인화로 해당 월의 일을 리턴합니다.
timestamp('2021-08-17T08:24:58Z').getDayOfMonth()

결과:

16
$t.getDayOfWeek() 시간소인 $t에서 일요일에 0을 기준으로 0을 기준으로 0을 리턴하는 요일을 리턴합니다.
timestamp('2021-08-17T08:24:58Z').getDayOfWeek()

결과:

2
$t.getDayOfYear() 시간소인 $t에서 정수, 0기반 색인화로 연도의 일을 리턴합니다.
timestamp('2021-08-17T08:24:58Z').getDayOfYear()

결과:

228
$t.getMonth() 시간소인 $t에서 정수, 0기반 색인화로 월을 리턴합니다.
timestamp('2021-08-17T08:24:58Z').getMonth()

결과:

7
$t.getFullYear() 시간소인 $t에서 정수로 연도를 리턴합니다.
timestamp('2021-08-17T08:24:58Z').getFullYear()

결과:

2021
$t.getHours() 타임스탬프의 $t 시간을 정수형으로 반환합니다.
timestamp('2021-08-17T08:24:58Z').getHours()

결과:

8
$t.getMinutes() 시간소인 $t에서 정수로 분을 리턴합니다.
timestamp('2021-08-17T08:24:58Z').getMinutes()

결과:

24
$t.getSeconds() 시간소인 $t에서 정수로 초를 리턴합니다.
timestamp('2021-08-17T08:24:58Z').getSeconds()

결과:

58
$t.getMilliseconds() 시간소인 $t에서 정수로 밀리초를 리턴합니다.
timestamp('2021-08-17T08:24:58.642Z').getMilliseconds()

결과:

642
int($t) 타임스탬프를 UNIX® 에포크 기준 초 단위로 int64 변환합니다.
int(timestamp('2021-08-17T08:24:58Z'))

결과:

1629188698
duration($d) 지속 기간 $d은(는) 지속 기간(초)을 나타내는 "s" 로 끝나는 문자열로 제공되어야 합니다.
timestamp('2021-08-17T08:24:58Z') + duration('3600s')

결과:

"2021-08-17T09:24:58Z"
formatTime($t, $s) $s형식의 $t 시간소인을 리턴합니다. 해당 $s 파일은 원하는 형식으로 "Monday, 02-January-06 15:04:05 MST"라는 기준 시간을 반드시 사용해야 합니다.
formatTime(timestamp('2021-08-17T08:24:58Z'), 'Monday, 02-Jan-06 15:04:05 MST')

결과:

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

표 8. URI 인코딩 및 디코딩 함수
구문 설명
encodeURI($uri) 지정된 문자열 $uri를 URI로 인코딩한 문자열을 반환합니다. 이 메서드는 다음 문자를 제외한 모든 문자를 이스케이프 처리합니다: A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #.
encodeURI('test.html?name=Jürgen&car=audi')

결과:

"test.html?name=J%C3%BCrgen&car=audi"
decodeURI($uri) $uri인코딩된 URI를 디코딩한 결과를 나타내는 문자열을 반환합니다.
decodeURI('test.html?name=J%C3%BCrgen&car=audi')

결과:

"test.html%3Fname%3DJ%C3%BCrgen%26car%3Daudi"
encodeURIComponent($uri) 지정된 문자열 $uri를 URI 구성 요소로 인코딩한 문자열을 반환합니다. 이 메서드는 다음 문자를 제외한 모든 문자를 이스케이프 처리합니다: A-Z a-z 0-9 - _ . ! ~ * ' ( ).
encodeURI('test.html?name=Jürgen&car=audi')

결과:

"test.html%3Fname%3DJ%C3%BCrgen%26car%3Daudi"
decodeURIComponent($uri) $uri인코딩된 URI 구성 요소의 디코딩된 버전을 나타내는 문자열을 반환합니다.
decodeURIComponent('test.html%3Fname%3DJ%C3%BCrgen%26car%3Daudi')

결과:

"test.html?name=Jürgen&car=audi"

UUID 함수

구문 설명
genUUID() RFC 4122 및 DCE 1.1: 인증 및 보안 서비스를 기반으로 UUID를 생성합니다.
genUUID()

결과:

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

입력 및 변환 함수

구문 설명
type($value) $value.의 유형을 반환합니다.
type(1234)

결과:"int"

type("hello")

결과:

"string"
bool($string) $string 문자열을 부울 값으로 변환합니다. "TRUE""true"true 허용 값은, "True", 및 입니다.

"FALSE""false"false 허용 값은, "False", 및 입니다.

bool("true")

결과:

true

bool("FALSE")

결과:

false
bytes($string) 문자열을 $string 바이트로 변환합니다.
bytes("Hello")

결과:

"aGVsbG8="
double($value) 값을 $value double 형식으로 변환합니다. 는 $value int, uint 또는 string 중 하나일 수 있습니다.
double(10)/4.0

결과:

2.5

double("3.14")

결과:

3.14

int($value) 값을 $value int형으로 변환합니다. 다음 유형 중 하나일 수 있습니다 $value : double, uint, string, enum 또는 timestamp. 타임스탬프가 제공된 경우, 반환되는 값은 Unix 에포크를 기준으로 한 초 단위입니다.
int(10.0/4)

결과:

2

int(3.14)

결과:

3

int("123")

결과:

123

int(now)

결과:

1742801032
uint($value) 값을 $value 부호 없는 정수(unsigned int)로 변환합니다. 는 $value 다음 유형 중 하나일 수 있습니다: double, int 또는 string.
uint(3.14)

결과:

3

uint("123")

결과:

123
string($value) 값을 $value 문자열로 변환합니다. 는 $value 다음 유형 중 하나일 수 있습니다: bool, int, uint, double, bytes, timestamp 또는 duration. 기간이 지정된 경우, 해당 값은 초와 초의 소수 부분으로 변환되며 뒤에 “s” 접미사가 붙습니다. 타임스탬프가 제공된 경우, 해당 값은 RFC3339 형식으로 변환됩니다.
string(true)

결과:

"true"

string(1234)

결과:

"1234"
string(b'helllo')

결과:

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

결과:

"60.1s"

string(now)

결과:

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

HTTP 클라이언트

값을 가져오기 위해 외부 API 엔드포인트에 호출하도록 속성 함수를 작성할 수 있습니다.
참고:
  • 권한 헤더 토큰은 이용자가 생성해야 합니다. 예를 들어, 함수에 포함된 장기 실행 API 키일 수 있습니다.
구문 설명
hc.Get($url, $headers)

상태 코드, 응답 헤더 및 응답 본문을 반환합니다. 콘텐츠 유형이 application/json인 경우 응답 본문은 JSON 객체로 반환되며, 그 외의 콘텐츠 유형인 경우 문자열로 반환됩니다. $url: URL API 엔드포인트는 반드시 완전한 URL 형식이어야 합니다

{"headerName":"headerVal"}$headers: JSON 양식 내의 객체.

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

결과:

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

hc.GetAsString($url, $headers) 직렬화된 문자열로 응답을 리턴합니다. API 엔드포인트의 $url: URL은(는) {"headerName":"headerVal"} 양식의 전체 URL $headers: JSON 오브젝트이어야 합니다.
hc.GetAsString("https://api.jke.com/resources/" + user.name.givenName, {"Authorization":"Some token"})

결과:

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

hc.GetAsJson($url, $headers) 응답을 JSON 오브젝트로 구문 분석합니다. API 엔드포인트의 $url: URL은(는) {"headerName":"headerVal"} 양식의 전체 URL $headers: JSON 오브젝트이어야 합니다.
hc.GetAsJson("https://api.jke.com/resources/" + user.name.givenName, {"Authorization":"Some token"}).value

결과:

"someValue"

hc.Post($url, $headers, $body) 상태 코드, 응답 헤더 및 응답 본문을 리턴합니다. 컨텐츠 유형이 application/json이거나 다른 컨텐츠 유형의 문자열인 경우 응답 본문이 JSON 오브젝트로 리턴됩니다.

$url - API 엔드포인트의 URL 는 반드시 완전한 URL 형식이어야 합니다.

$headers - {"headerName":"headerVal"} 양식의 JSON 오브젝트

$body - 문자열 양식으로 본문을 요청합니다.

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

결과:

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

hc.Patch($url, $headers, $body) 상태 코드, 응답 헤더 및 응답 본문을 반환합니다. 콘텐츠 유형이 application/json인 경우 응답 본문은 JSON 객체로 반환되며, 그 외의 콘텐츠 유형인 경우 문자열로 반환됩니다.

$url: API 엔드포인트의 URL 부분은 반드시 URL 로 시작해야 합니다.

{"headerName":"headerVal"}$headers: 다음과 같은 형식의 JSON 객체.

$body: 문자열 형식의 요청 본문.

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

결과:

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

hc.Put($url, $headers, $body) 상태 코드, 응답 헤더 및 응답 본문을 반환합니다. 콘텐츠 유형이 application/json인 경우 응답 본문은 JSON 객체로 반환되며, 그 외의 콘텐츠 유형인 경우 문자열로 반환됩니다.

$url: API 엔드포인트의 URL 부분은 반드시 URL 로 시작해야 합니다.

{"headerName":"headerVal"}$headers: 다음과 같은 형식의 JSON 객체.

$body: 문자열 형식의 요청 본문.

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

결과:

{"statusCode": "200", "responseHeaders": {"header": ["value1", "value2"]}, "responseBody": {"message": "success"}}
hc.Delete($url, $headers) 상태 코드, 응답 헤더 및 응답 본문을 반환합니다. 콘텐츠 유형이 application/JSON인 경우 응답 본문이 JSON 객체로 반환되며, 그 외의 콘텐츠 유형인 경우에는 문자열로 반환됩니다.

$url: API 엔드포인트의 URL 는 반드시 URL 형식으로 되어야 합니다.

$headers: 양식 내의 JSON 객체

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

결과:

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

hc.Opts($options) $options: 8 플래그가 현재 지원됩니다.
  1. insecure: SSL 연결이 불안정할 수 있음을 표시합니다.
  2. certLabel: CI 테넌트에 업로드되는 서명자 인증의 레이블입니다.
  3. tlsMinVersion: 지원되는 최소 TLS 버전입니다. 사용 가능한 옵션은 TLSv1.0, TLSv1.1, TLSv1.2입니다. 이 플래그가 지정되지 않은 경우 최소 TLS 버전은 TLSv1.2로 설정됩니다.
  4. followRedirects: HTTP 클라이언트의 경로 재지정 여부를 표시합니다. 값이 지정되지 않은 경우 기본값 설정은 false로 설정됩니다..
  5. cache: 응답이 캐시되는지 여부를 표시하는 부울입니다. 설정은 기본적으로 GET 호출에 대해 참이며 다른 HTTP 방법에 대해서는 기본값이 true로 설정됩니다.
  6. cacheExpiry: 캐시된 응답의 수명(초), 최대 1시간(3600). 수명이 지정되지 않은 경우 설정의 기본값은 60초입니다.
  7. mtls: 요청에 대해 상호 TLS를 사용할 수 있는지 여부를 표시하는 부울입니다. 값이 참으로 설정된 경우, 다음 플래그의 값이 무시됩니다. insecure, certLabel, tlsMinVersion, followRedirects.
  8. mtlsCert: MTLS 요청에 대해 제공할 기존 개인 인증의 레이블입니다.
이 함수는 hc 인스턴스로 응답하므로 GetAsJSONGetAsString을(를) 호출할 수 있습니다.
hc.Opts({"certLabel": "jkeCA","insecure":false,
"tlsMinVersion":"TLSv1.2", "followRedirects":true,"cache":true,
"cacheExpiry":"1200"}).GetAsString(...)
참고: 요청당 응답 본문의 크기 제한은 4MB입니다.
URL 제한 사항
$protocol://$host[:$port]HTTP 클라이언트에 제공되는 API 엔드포인트의 URL 는. 형식의 완전한 URL 주소여야 합니다.
  1. $protocol 반드시 'http' 또는 'https'여야 합니다.
  2. $host 완전한 도메인 이름(FQDN)이어야 합니다. IP 주소는 허용되지 않습니다.
  3. 포트 번호는 $port 선택 사항입니다. HTTP 클라이언트는 다음 포트를 지원합니다. 다른 포트를 사용할 경우 시간 초과가 발생합니다.
    • 포트 80, 443 및 8088
    • 포트 범위 7000-7050
    • 포트 범위 8000-8050
HTTP 클라이언트 응답 캐싱

기본 캐시 만기가 1분인 GET 호출(GetAsStringGetAsJSON)에 대해 HTTP 응답 캐싱이 기본적으로 사용 가능합니다. 이는 기본적으로 POST 호출에 사용되지 않습니다. HTTP 클라이언트 응답 캐싱의 기본 설정을 대체하려면 cache 플래그가 true 또는 false의 값과 함께 hc.Opts 에 포함되어야 합니다. 캐시 수명은 기본적으로 60초로 설정됩니다. 기본 캐시 수명을 대체하려면 cacheExpiry 플래그가 최대 3600초(1시간)까지 초 단위의 값으로 hc.Opts에 포함되어야 합니다.

적용 위험성

현재 사용자 세션 위험 레벨 및 연관된 권한 데이터에 액세스하려면 적용 액세스 위험 함수를 사용하십시오.

데이터가 채워지는 것을 확인하기 위해 사용자 정의 속성을 사용하기 전에 세션에서 최소한 한 번은 적응 액세스 정책을 평가해야 합니다. 그렇지 않으면 “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.getAdaptiveSessionLevel()

결과:

"LOW"

risk.getAdaptiveSessionData() 사용자 세션과 관련된 적용 위험 데이터의 JSON 배열을 리턴합니다. is 접두부가 있는 특성은 부울 값을 리턴합니다. 나머지 모든 특성은 문자열을 리턴합니다.
risk.getAdaptiveSessionData()

결과:

"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 속성을 반환합니다.
risk.getAdaptiveSessionData().isRiskyDevice

결과:

true
risk.getAdaptiveSessionData().isp

결과:

"Network Technology (AUST) P/L”

string참고: 애플리케이션의 속성 매핑에서 추출된 적응형 속성을 사용하거나 액세스 정책 평가 시 사용자 정의 속성 조건을 적용할 때, JSON 변환을 포함하여 데이터형 형변환이 필요할 수 있습니다.

예:

액세스 정책에서 평가하기 위해 문자열 값을 반환하려면, 먼저 해당 risk_score 값을 문자열로 형변환해야 합니다.

 string(risk.getRawAdaptiveSessionData()[1].message.pinpoint_assessment.risk.risk_score)

고급 규칙에서 수학 또는 논리 조작이나 평가를 수행하려면 먼저 JSON 번호를 int에 캐스트해야 합니다.

 int(risk.getRawAdaptiveSessionData()[1].message.pinpoint_assessment.risk.risk_score) > 900
또는 2배로 평가됨
 risk.getRawAdaptiveSessionData()[1].message.pinpoint_assessment.risk.risk_score > 900.0

애플리케이션

특정 사용 사례(프로비저닝 및 조정)의 경우, CELx 규칙에서 해당 app 객체를 사용할 수 있습니다. 이 객체는 계정 동기화에 사용되는 애플리케이션 JSON을 나타냅니다.

app 객체는 규칙 내에서 그 자체로 맵으로 취급될 수 있으며, 다음과 같은 헬퍼 메서드도 제공합니다.
구문 설명
app.getSupportingData() 애플리케이션의 지원 데이터를 반환합니다.
app.getSupportingData()

결과:

<JSON object representing supporting data>

OAuth

구문 설명
oauth.GetBearerToken($url, $clientId, $clientSecret) 이 함수는 client_credentials 권한 부여 유형을 사용하여 지정된 토큰 엔드포인트에 $url 요청을 보내며, clientId $clientId및 clientSecret$clientSecret 를 전달하고, 성공 시 액세스 토큰을 반환합니다.
oauth.GetBearerToken("https://api.jke.com/token", "123456-abcd-efgh-9876-q1w2e3r4t5y6", "secret")

결과:

15PSJF576qi2LF658k30I1WLTwGOw2Vzage2AtiS

JWT 함수

구문 설명
jwt.sign($payload, $headers) 이 함수는 부호 있는 JSON 웹 토큰(JWT)을 생성합니다. 이 함수는 두 개의 매개변수를 받습니다:
  • $payload: 여기에는 JSON 객체로 예상되는 페이로드가 포함되어 있습니다.
  • kid$headers: 여기에는, typ, alg, 등과 같은 헤더가 포함되어 있습니다. 는 kid Verify 테넌트에 로드된 개인 인증서의 레이블입니다.
참고: 기본 동작:
  • 헤더에 가 지정되지 않은 경우 kid , 테넌트의 기본 개인 인증서를 사용하여 JWT에 서명합니다.
  • 헤더에 가 지정되지 않은 경우 alg , 시스템은 RS256 를 사용하여 JWT에 서명합니다.
jwt.sign({'key1': 'value1', 'auth': ['lval3', 'lval4'], 'iat': 1696567390}, {'alg':'RS256','kid':'cert1'})

결과:

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

디버그 기능

디버그 함수를 사용하면 식을 평가하면서 동시에 추적 로그를 생성할 수 있습니다. 추적 모드가 활성화된 상태에서 규칙이 실행되면 추적 로그가 생성됩니다. 추적 모드 활성화 및 추적 로그 확인에 대한 자세한 내용은 ‘플로우 생성’‘추적 보기 관리’의 ‘추적 설정’을 참조하십시오.

구문 설명
debug($expr, $logString) $logString$expr 을 평가하고 디버그 로그 를 생성합니다.

이 함수는 두 개의 매개변수를 받습니다:

  • $expr: 평가할 표현식.
  • $logString: 생성될 로그 문자열. 이는 표현식일 수 있으며, 항상 문자열로 평가되어야 합니다. $expr$value$logString 에는 문자열이 포함되어야 하며, 이 문자열은 의 평가 결과로 얻은 값을 대체하는 데 사용됩니다.
debug("jessica@jke.com".split("@")[1], "The email domain is $value")

결과:

jke.com

다음과 같은 추적 로그도 생성됩니다: "The email domain is jke.com".

debug($expr, $logString, $metadata) $expr 을 평가하고, 추가된 사용자 정의 메타데이터와 함께 디버그 로그 $logString 를 생성합니다.

이 함수는 세 개의 매개변수를 받습니다:

  • $expr: 평가할 표현식.
  • $logString: 생성될 로그 문자열. 이는 표현식일 수 있으며, 항상 문자열로 평가되어야 합니다. $expr$value$logString 에는 문자열이 포함되어야 하며, 이 문자열은 의 평가 결과로 얻은 값을 대체하는 데 사용됩니다.
  • $metadata: 로그와 함께 전송되는 사용자 정의 메타데이터로, 키-값 쌍의 맵 형태로 제공됩니다. 각 쌍의 값은 식일 수 있으며, 이 식은 문자열로 평가되어야 합니다.
debug("jessica@jke.com".split("@")[1], "The email domain is $value", {"flow":
      "login", "time": string(now)})

결과:

jke.com
다음과 같은 추적 로그도 생성되며, 여기에는The email domain is jke.com 다음과 같은 메타데이터 필드가 포함됩니다:
  • "flow": "login"
  • "time": "< timestamp >"

캐시 함수

캐시 함수를 사용하면 Rule 서비스의 캐시를 활용할 수 있습니다. 캐시 기능에는 세션 기반과 비세션 기반, 두 가지 유형이 있습니다. 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
}
표 9. 세션 기반 캐시 기능
구문 설명
session.Set($key, $value $ttlSec) 사용자 세션과 연결된 값을 캐시에 저장합니다.

이 함수는 세 개의 매개변수를 받습니다:

  • $key: 캐시에 사용되는 키. 이는 표현식일 수 있으며, 항상 문자열로 평가되어야 합니다. 이 키의 최대 길이는 16자입니다.
  • $value: 저장할 값. 이는 표현식일 수 있으며, 항상 문자열로 평가되어야 합니다. 이 값의 최대 길이는 1,000,000자입니다.
  • $ttlSec: 해당 값의 유효 기간. 최대값은 28800입니다.
session.Set("computedID", "user1@web.com", "1200")
결과:

{"result":{"isSuccessful":true}}
session.Get($key) 캐시에 $key 저장된 사용자 세션과 연결된 값을 가져옵니다.
session.Get("computedID")
결과:

{"result":{"isSuccessful":true, "value": "user1@web.com"}}
session.Delete($key) 캐시에서 해당 $key 사용자 세션과 연결된 값을 제거합니다.
session.Delete("computedID")
결과:

{"result":{"isSuccessful":true}}
session.Exists($key) 사용자 세션과 연결된 항목이 $key 캐시에 있는지 확인합니다.
session.Exists("computedID")
결과:

{"result":{"isSuccessful":true, "value":"true"}}
session.GetAndDelete($key) 캐시에 저장된 $key 사용자 세션과 연결된 값을 가져오고, 이를 캐시에서 제거합니다.
session.GetAndDelete("computedID")
결과:

{"result":{"isSuccessful":true, "value": "user1@web.com"}}
표 10. 세션 기반이 아닌 캐시 기능
구문 설명
cache.Set($key, $value $ttlSec) 값을 캐시에 저장합니다.
이 함수는 3개의 매개변수를 받습니다:
  • $key: 캐시에 사용되는 키. 이는 표현식일 수 있으며, 항상 문자열로 평가되어야 합니다. 이 키의 최대 길이는 16자입니다.
  • $value: 저장할 값. 이는 표현식일 수 있으며, 항상 문자열로 평가되어야 합니다. 이 값의 최대 길이는 1,000,000자입니다.
  • $ttlSec: 해당 값의 유효 기간. 최대값은 604800입니다.
cache.Set("companyName", "DunderMifflin", "1200")

결과:

{"result":{"isSuccessful":true}}
cache.Get($key) 캐시에 $key 있는 값을 가져옵니다.
cache.Get("companyName")
결과:

{"result":{"isSuccessful":true, "value": "DunderMifflin"}}
cache.Delete($key) 캐시에서 $key 값을 제거합니다.
cache.Delete("companyName")
결과:

{"result":{"isSuccessful":true}}
cache.Exists($key) 캐시에 해당 항목이 $key 있는지 확인합니다.
cache.Exists("companyName")
결과:

{"result":{"isSuccessful":true, "value":"true"}}
cache.GetAndDelete($key) 캐시에 저장된 $key 값을 가져오고, 해당 값을 캐시에서 제거합니다.
cache.GetAndDelete("companyName")
결과:

{"result":{"isSuccessful":true, "value": "DunderMifflin"}}
표 11. 흔히 발생하는 오류 상황
오류 결과
키의 길이가 제한을 초과합니다
{"error":{"messageId":"CSIBU2000E","messageDescription":"The length of the
              key provided exceeds the character limit of [16]."}}}
값의 길이가 제한을 초과합니다
{"error":{"messageId":"CSIBU2000E","messageDescription":The length of the
              value provided for the key [exampleKey] exceeds the character limit of
              [1000000]."}}}
캐시에서 키를 가져올 때 해당 키를 찾을 수 없습니다
{"result":{"errorID":"CSIBU2040E","errorMessage":"Failed to get a value from
              the cache with the key [exampleKey].","isSuccessful":false}}
캐시 한도를 초과할 경우
{"error":{"messageId":"CSIBU2000E","messageDescription":"Cache limit has
              been exceeded."}}

비밀 기능

시크릿 기능을 사용하여 기존 시크릿에 액세스하세요.
참고: 요청 시 CELx 표현식( VDEV_66277 ) 내의 비밀 기능을 활성화할 수 있습니다. 이 기능을 요청하시려면 IBM 영업 담당자나 IBM 담당자에게 연락하여 해당 기능 활성화에 대한 의사를 밝혀 주시기 바랍니다. 지원 티켓을 작성할 권한이 있다면, “CELx 표현식 내의 시크릿”이라는 제목으로 지원 티켓을 작성해 주세요. IBM Verify 체험판 구독자는 지원 티켓을 생성할 수 없습니다.
구문 설명
secrets.get($group, $name) 지정된 그룹과 $group 이름으로 비밀번호를 확인하세요 $name secrets.get("apiKeys", "testKey")

결과:

<the testKey secret in the apiKeys group>
secrets.get($name) $name지정된 이름의 비밀을 확인하세요. 비밀 그룹은 기본 그룹인 "default"가 됩니다. secrets.get("testKey")

결과:

<the testKey secret in the default group>