속성 기능
구성 API 샘플 및 구문을 사용하여 사용자 정의 함수를 작성할 수 있습니다.
개요
속성 값을 싱글 사인온 인증 토큰 양식으로 애플리케이션에 전달하기 전에 또는 계정을 프로비저닝할 때 함수를 사용하여 속성 값을 참조, 변환 및 결합할 수 있습니다. 함수는 IBM® Verify에 대해 인증하는 데 사용되는 ID 소스 증명서에 액세스할 수 있습니다. 이 증명서는 클라우드 디렉토리 및 외부 API 엔드포인트에 저장된 사용자 오브젝트(SCIM 양식)입니다. 예를 들어,formalDisplayName(이)라는 속성을 고정 값 속성으로 작성할 수 있으며 지정된 방식으로 user.name.givenName 및 user.name.familyName을(를) 연결하는 함수를 지정할 수 있습니다.고급 규칙 속성을 구성하려면 관리 콘솔에서 으로 이동하십시오. 그런 다음 다른 모든 속성 유형을 매핑하는 것과 마찬가지로 애플리케이션 구성에서 이러한 속성을 매핑하십시오.
도메인 객체
용어, 도메인 오브젝트는 속성의 사용자 정의 함수에서 액세스할 수 있는 가능한 모든 오브젝트를 표시하는 데 사용되는 캐치올 구문입니다.
- 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 객체에는 두 개의 사용자 정의 속성인car와hobbies가 정의되어 있습니다. 이러한 속성은 관리 콘솔을 통해 구성할 수 있는 스키마 확장입니다. 사용자 객체에는 Users API를 Verify 통해 값을 추가할 수 있습니다.구문 설명 예 user.$property$property에 액세스하십시오. .및[".."]둘 다 사용할 수 있습니다.user.name.familyName + ", " + user.name["givenName"]결과:
Hill, Jessicauser.$values.filter(x, $condition)$values: 목록입니다. 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에서 다음 기능을 사용할 수 있습니다.
이 함수들의 반환값은 아래에 정의된 것과 같은 맵 객체입니다. 이를 통해 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와 속성명은 서로 바꿔서 사용할 수 있습니다.
email및username속성 값은 필수입니다. 나머지 값들은 선택 사항입니다.새 사용자의 비밀번호를 지정하려면 $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와 속성명은 서로 바꿔서 사용할 수 있습니다.
email및username속성 값은 필수입니다. 나머지 값들은 선택 사항입니다. 새 사용자의 비밀번호를 지정하려면, 파일에$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'})- 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 비교 |
|
[ ] |
맵 액세스 |
|
+ |
유형에 따른 연결 및 추가 |
|
- |
빼기 |
|
* |
곱하기 |
|
/ |
디비전 |
|
> |
보다 큼 조건 |
|
< |
보다 작음 조건 |
|
>= |
보다 크거나 같음 |
|
<= |
보다 작거나 같음 |
|
? |
운영자인 경우 Ternary |
|
표준 함수
| 구문 | 설명 | 예 |
|---|---|---|
$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는 $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) |
$condition(으)로 $values 필터합니다. |
결과:
|
$values.all(x, $condition) |
모든 $values이(가) $condition을(를) 충족하는지 확인합니다. |
결과:
|
$values.exists(x, $condition) |
값이 $condition을(를) 충족하는지 확인합니다. |
결과:
|
$values.exists_one(x, $condition) |
정확히 하나의 값이 $condition을(를) 충족하는지 확인합니다. |
결과:
|
$values.map(x, $op) |
각 값에서 $op을(를) 실행합니다. |
결과:
|
stringToJson($s) |
문자열 $s를 JSON 배열로 변환합니다. |
결과:
|
jsonToString($json) |
목록 $json을(를) 문자열로 변환하십시오. |
결과:
|
joinStrings($values, $s) |
목록 $value에 있는 문자열을 구분 기호($value)로 결합합니다. |
결과:
|
$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) |
맵 $m에 string 형식의 키와 object 형식의 값을 $v 가진 항목을 $k 삽입합니다. $v$k맵에 $m 해당 키에 대한 값이 이미 존재했다면, 기존 값은 새 값으로 대체됩니다. |
결과: "{"hello": "world", "key1": "value1"} |
$m.putAll($v) |
$m맵의 $v 내용을 맵에 삽입합니다. $v$v만약 맵에 $m 이미 해당 키에 대한 값이 존재했다면, 맵에 있던 기존 값은 맵에 $m 있는 값으로 대체됩니다. |
결과: "{"hello": "world", "key1": "value1", "test": true} |
$m.remove($k) |
맵 $m 에 string 형식의 키 $k 에 대한 매핑이 존재할 경우 이를 제거합니다. |
결과: {"hello": "world"} |
$m.removeAll($l) |
$m$l 맵에 해당 키 목록에 대한 매핑이 존재할 경우, 이를 모두 제거합니다. |
결과: {"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에서 정수, 하나의 기반 색인화로 해당 월의 일을 리턴합니다. |
결과: 17 |
$t.getDayOfMonth() |
시간소인 $t에서 정수, 0기반 색인화로 해당 월의 일을 리턴합니다. |
결과: 16 |
$t.getDayOfWeek() |
시간소인 $t에서 일요일에 0을 기준으로 0을 기준으로 0을 리턴하는 요일을 리턴합니다. |
결과: 2 |
$t.getDayOfYear() |
시간소인 $t에서 정수, 0기반 색인화로 연도의 일을 리턴합니다. |
결과: 228 |
$t.getMonth() |
시간소인 $t에서 정수, 0기반 색인화로 월을 리턴합니다. |
결과: 7 |
$t.getFullYear() |
시간소인 $t에서 정수로 연도를 리턴합니다. |
결과: 2021 |
$t.getHours() |
타임스탬프의 $t 시간을 정수형으로 반환합니다. |
결과: 8 |
$t.getMinutes() |
시간소인 $t에서 정수로 분을 리턴합니다. |
결과: 24 |
$t.getSeconds() |
시간소인 $t에서 정수로 초를 리턴합니다. |
결과: 58 |
$t.getMilliseconds() |
시간소인 $t에서 정수로 밀리초를 리턴합니다. |
결과: 642 |
int($t) |
타임스탬프를 UNIX® 에포크 기준 초 단위로 int64 변환합니다. |
결과: 1629188698 |
duration($d) |
지속 기간 $d은(는) 지속 기간(초)을 나타내는 "s" 로 끝나는 문자열로 제공되어야 합니다. |
결과: "2021-08-17T09:24:58Z" |
formatTime($t, $s) |
$s형식의 $t 시간소인을 리턴합니다. 해당 $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) |
값을 $value double 형식으로 변환합니다. 는 $value int, uint 또는 string 중 하나일 수 있습니다. |
결과: 2.5
결과:
|
int($value) |
값을 $value int형으로 변환합니다. 다음 유형 중 하나일 수 있습니다 $value : double, uint, string, enum 또는 timestamp. 타임스탬프가 제공된 경우, 반환되는 값은 Unix 에포크를 기준으로 한 초 단위입니다. |
결과:
결과:
결과: 123
결과: 1742801032 |
uint($value) |
값을 $value 부호 없는 정수(unsigned int)로 변환합니다. 는 $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 주소여야 합니다.- 는
$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에 포함되어야 합니다.
적용 위험성
현재 사용자 세션 위험 레벨 및 연관된 권한 데이터에 액세스하려면 적용 액세스 위험 함수를 사용하십시오.
데이터가 채워지는 것을 확인하기 위해 사용자 정의 속성을 사용하기 전에 세션에서 최소한 한 번은 적응 액세스 정책을 평가해야 합니다. 그렇지 않으면 “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)
고급 규칙에서 수학 또는 논리 조작이나 평가를 수행하려면 먼저 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() |
애플리케이션의 지원 데이터를 반환합니다. |
결과:
|
OAuth
| 구문 | 설명 | 예 |
|---|---|---|
oauth.GetBearerToken($url, $clientId, $clientSecret) |
이 함수는 client_credentials 권한 부여 유형을 사용하여 지정된 토큰 엔드포인트에 $url 요청을 보내며, clientId $clientId및 clientSecret$clientSecret 를 전달하고, 성공 시 액세스 토큰을 반환합니다. |
결과:
|
JWT 함수
| 구문 | 설명 | 예 |
|---|---|---|
jwt.sign($payload, $headers) |
이 함수는 부호 있는 JSON 웹 토큰(JWT)을 생성합니다. 이 함수는 두 개의 매개변수를 받습니다:
참고: 기본 동작:
|
결과:
|
디버그 기능
디버그 함수를 사용하면 식을 평가하면서 동시에 추적 로그를 생성할 수 있습니다. 추적 모드가 활성화된 상태에서 규칙이 실행되면 추적 로그가 생성됩니다. 추적 모드 활성화 및 추적 로그 확인에 대한 자세한 내용은 ‘플로우 생성’ 및 ‘추적 보기 관리’의 ‘추적 설정’을 참조하십시오.
| 구문 | 설명 | 예 |
|---|---|---|
debug($expr, $logString) |
$logString식 $expr 을 평가하고 디버그 로그 를 생성합니다.이 함수는 두 개의 매개변수를 받습니다:
|
결과: jke.com다음과 같은 추적 로그도 생성됩니다: " |
debug($expr, $logString, $metadata) |
식 $expr 을 평가하고, 추가된 사용자 정의 메타데이터와 함께 디버그 로그 $logString 를 생성합니다.이 함수는 세 개의 매개변수를 받습니다:
|
결과: jke.com다음과 같은 추적 로그도 생성되며, 여기에는
The email domain is jke.com 다음과 같은 메타데이터 필드가 포함됩니다:
|
캐시 함수
캐시 함수를 사용하면 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
}
| 구문 | 설명 | 예 |
|---|---|---|
session.Set($key, $value $ttlSec) |
사용자 세션과 연결된 값을 캐시에 저장합니다. 이 함수는 세 개의 매개변수를 받습니다:
|
결과: {"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.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> |