권한 컨텍스트에 대한 OpenID Connect 요청 맵핑

구성에 따라 IBM® Verify의 OAuth 또는 Open ID Connect 플로우가 권한 조치를 수행할 수 있습니다.

플로우는 이러한 조치를 포함할 수 있습니다.

  • 액세스 정책을 평가합니다.
  • 권한 부여에 저장되고 ID 토큰 및 인트로스펙션 응답을 빌드하는 데 사용되는 클레임 값을 계산합니다.

컨텍스트 요청 맵핑 규칙은 권한 요청에서 수집되는 컨텍스트를 기능 보강하는 메커니즘을 제공합니다. 예를 들어, 권한 요청은 contextID(이)라는 사용자 정의 요청 매개변수를 포함할 수 있습니다. 사용자 정의 규칙은 HTTP 요청의 contextID을(를) 외부 엔드포인트에 포함할 수 있습니다. 이 HTTP 요청의 결과는 액세스 정책 평가 및 승인 강화 중에 사용되는 requestContext에 압축 해제하여 추가할 수 있는 오브젝트입니다. r_attr_functions.html 참조

이 규칙은 단순한 단일 행 표현식 언어를 사용하거나 고급 다중 행 YAML 기반 문서로 작성할 수 있습니다. ‘다중 행 규칙 실행기’를 참조하십시오.

사용 가능한 입력 오브젝트

사용자 정의 규칙은 인증 후에 실행되지만 권한 전에 사용 가능한 정보는 가능한 모든 도메인 오브젝트를 포함하지 않습니다. 이러한 오브젝트는 다음 오브젝트로 제한됩니다.
HTTP 요청 컨텍스트
사용자가 Verify에 로그인하면 요청 맵핑 규칙에서 수신 HTTP 요청 컨텍스트에 액세스할 수 있습니다. 모든 OAuth 요청 매개변수(예: claimsscope)는 이 requestContext에서 사용 가능합니다. 의 requestContext 일반적인 구조와 사용법은 r_attr_functions.html 의 “ HTTP 요청 컨텍스트” 섹션에 설명되어 있습니다.
액세스의 경우, requestContext에서 특정 값이 미리 계산됩니다. claims 요청 매개변수는 일반적으로 다음 예제와 같은 JSON 파일로 표시됩니다.

{
    "id_token": { 
        "claim_name": { 
            "essential": false, 
            "value": "some_value"
        }
    },
    "userinfo": {
        "claim_name": { 
            "essential": false, 
            "value": "some_value"
        }
    }
}

이 형식은 액세스하기에 번거로울 수 있습니다. requestContext에서 사용되는 키는 claims_claimType_claimName 형식입니다. claimTypeuserinfo 또는 idtoken(누락된 밑줄 알림)입니다. 따라서 앞의 예를 사용하여 claim_name 값은 requestContext.getValue('claims_idtoken_claim_name') 값을 사용하여 얻을 수 있습니다.

마찬가지로, scope은(는) 문자열 배열을 빌드하기 위해 공백 구분 기호로 분할됩니다.

ID 소스 인증 정보
사용자가 Verify에 로그인하면 ID 소스 신임 정보 속성이 로그인 세션에 추가되고 요청 맵핑 규칙에서 액세스할 수 있습니다.
idsuser 도메인 오브젝트는 문자열 키 및 문자열 배열 값이 있는 맵으로 사용 가능합니다. 예를 들면 다음과 같습니다.

{
  "realmName": ["cloudIdentityRealm"],
  "displayName": ["Jessica J. Hill"],
  "phone": ["+12324321234"]
}
r_attr_functions.html 을 참조하십시오.
기타 함수 및 연산자
맵핑 규칙에서 표준 연산자 및 함수를 사용할 수 있습니다. 또한 HTTP 클라이언트를 사용하여 아웃바운드 요청을 할 수 있습니다. 지원되는 기타 기능에는 해싱 및 시간소인이 포함됩니다. r_attr_functions.html 의 관련 섹션을 참조하십시오.

리턴 오브젝트

이 사용자 정의 규칙은 JSON 오브젝트를 리턴할 것으로 예상되며 각 JSON 특성의 값은 문자열 배열이 될 것으로 예상됩니다.

다음 예제는 리턴 오브젝트입니다.

{
   "ageRange": ["toddler"],
   "interests": ["sleeping", "other_misc_activities"]
}
이 리턴값은 처리되며 나중에 requestContext.ageRangerequestContext.interests을(를) 사용하여 고급 규칙 속성에서 액세스할 수 있습니다. 고급 규칙 속성은 {{requestContext.ageRange[0] != 'toddler'}}과(와) 같은 액세스 정책 또는 권한 부여 부여 requestContext.interests의 속성을 맵핑하는 데 사용할 수 있습니다.

예제-ID 토큰에 취미 추가합니다.

다음 코드는 ID 토큰에 hobbies을(를) 추가하는 요청 맵핑에 대한 사용자 정의 규칙의 예제입니다.

statements:
- context: "contextData := hc.getAsJSON('https://jke.com/users/' + idsuser.getValue('uid'), { 'Authorization': 'apikey supersecretkey' })"
- return: >-
   {
      "hobbies": request.Context.interests.filter(x, x != 'other')
   }
이 예제에서 규칙은 사용자에 대한 추가 정보를 얻기 위해 외부 사용자 엔드포인트로 호출합니다. idsuser에서 사용자의 인증된 세션을 나타내는 Verify 오브젝트를 사용합니다. 마지막으로, 규칙은 응답에서 hobbies을(를) 추출합니다.
참고: 이 규칙은 어떠한 형태의 유효성 검사도 수행하지 않으며, 실제 운영 환경에서 사용할 준비가 되어 있지 않습니다.
hobbies은(는) 다음 방법으로 액세스할 수 있습니다.
  • my_hobbies(으)로 정의된 사용자 정의 규칙을 사용하여 이름이 requestContext.hobbies인 고급 규칙 속성을 작성합니다. 이 속성의 데이터 유형은 다중 값 문자열입니다.
  • 이 속성에 대한 속성 맵핑을 추가하는 중입니다. OpenID 의 Connect introspect, ID 토큰 및 사용자 정보 매핑을 참조하십시오.