권한 컨텍스트에 대한 OpenID Connect 요청 맵핑
구성에 따라 IBM® Verify의 OAuth 또는 Open ID Connect 플로우가 권한 조치를 수행할 수 있습니다.
플로우는 이러한 조치를 포함할 수 있습니다.
- 액세스 정책을 평가합니다.
- 권한 부여에 저장되고 ID 토큰 및 인트로스펙션 응답을 빌드하는 데 사용되는 클레임 값을 계산합니다.
컨텍스트 요청 맵핑 규칙은 권한 요청에서 수집되는 컨텍스트를 기능 보강하는 메커니즘을 제공합니다. 예를 들어, 권한 요청은 contextID(이)라는 사용자 정의 요청 매개변수를 포함할 수 있습니다. 사용자 정의 규칙은 HTTP 요청의 contextID을(를) 외부 엔드포인트에 포함할 수 있습니다. 이 HTTP 요청의 결과는 액세스 정책 평가 및 승인 강화 중에 사용되는 requestContext에 압축 해제하여 추가할 수 있는 오브젝트입니다. r_attr_functions.html 참조
이 규칙은 단순한 단일 행 표현식 언어를 사용하거나 고급 다중 행 YAML 기반 문서로 작성할 수 있습니다. ‘다중 행 규칙 실행기’를 참조하십시오.
사용 가능한 입력 오브젝트
- HTTP 요청 컨텍스트
- 사용자가 Verify에 로그인하면 요청 맵핑 규칙에서 수신 HTTP 요청 컨텍스트에 액세스할 수 있습니다. 모든 OAuth 요청 매개변수(예:
claims및scope)는 이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형식입니다.claimType는userinfo또는idtoken(누락된 밑줄 알림)입니다. 따라서 앞의 예를 사용하여claim_name값은requestContext.getValue('claims_idtoken_claim_name')값을 사용하여 얻을 수 있습니다.마찬가지로,
scope은(는) 문자열 배열을 빌드하기 위해 공백 구분 기호로 분할됩니다. - ID 소스 인증 정보
- 사용자가 Verify에 로그인하면 ID 소스 신임 정보 속성이 로그인 세션에 추가되고 요청 맵핑 규칙에서 액세스할 수 있습니다.
idsuser도메인 오브젝트는 문자열 키 및 문자열 배열 값이 있는 맵으로 사용 가능합니다. 예를 들면 다음과 같습니다.
r_attr_functions.html 을 참조하십시오.{ "realmName": ["cloudIdentityRealm"], "displayName": ["Jessica J. Hill"], "phone": ["+12324321234"] } - 기타 함수 및 연산자
- 맵핑 규칙에서 표준 연산자 및 함수를 사용할 수 있습니다. 또한 HTTP 클라이언트를 사용하여 아웃바운드 요청을 할 수 있습니다. 지원되는 기타 기능에는 해싱 및 시간소인이 포함됩니다. r_attr_functions.html 의 관련 섹션을 참조하십시오.
리턴 오브젝트
이 사용자 정의 규칙은 JSON 오브젝트를 리턴할 것으로 예상되며 각 JSON 특성의 값은 문자열 배열이 될 것으로 예상됩니다.
{
"ageRange": ["toddler"],
"interests": ["sleeping", "other_misc_activities"]
}이 리턴값은 처리되며 나중에 requestContext.ageRange 및 requestContext.interests을(를) 사용하여 고급 규칙 속성에서 액세스할 수 있습니다. 고급 규칙 속성은 {{requestContext.ageRange[0]
!= 'toddler'}}과(와) 같은 액세스 정책 또는 권한 부여 부여 requestContext.interests의 속성을 맵핑하는 데 사용할 수 있습니다.예제-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 토큰 및 사용자 정보 매핑을 참조하십시오.