OpenID Connect 요청 맵핑 오픈 뱅킹 목적 ID
써드파티 애플리케이션이 사용자 권한 부여(예: 지불 전송)를 필요로 하는 트랜잭션을 시작하려는 경우, 금융 기관 또는 은행에서 제공하는 API를 사용하여 트랜잭션의 세부사항을 등록합니다. 예를 들어, 트랜잭션의 양과 통화 유형을 등록합니다. 이 과정은 때로 "숙박 의도"라고 합니다. API는 UK Open Banking 스펙에서 Consent ID라고 하는 의도 식별자로 응답합니다. 애플리케이션은 사용자 승인으로 기록되는 사용자 권한을 가져오기 위해 OAuth 권한 코드 플로우를 시작합니다.
- 요청에서 의도 ID를 추출합니다.
- 일반적으로 은행의 API를 호출하여 의사 컨텍스트 정보를 얻습니다.
id_token에서 청구 또는 범위 값으로 권한을 표시하는 방법을 선택하십시오.
사용 가능한 입력 오브젝트
이 사용자 정의 규칙은 인증 후에 실행되지만 권한 부여 이전에 사용 가능한 정보는 가능한 모든 도메인 오브젝트를 포함하지 않습니다. 이는 다음 유형으로 제한됩니다.
- 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" } } }이 JSON은 액세스하기가 번거로울 수 있으므로
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 오브젝트이어야 합니다.
| 특성 | 유형 | 필수인지 여부 | 설명 |
|---|---|---|---|
type |
문자열 | 예 | 유형은 수행 중인 트랜잭션의 유형을 표시합니다. 예를 들어, 지불 개시가 있습니다. 이는 데이터 개인정보 보호 용도로 표시됩니다. 시스템에서 제공하거나 생성하는 용도 ID는 type의 값입니다. |
intentID |
문자열 | 예 | 의사 ID를 제공해야 합니다. 일반적으로 requestContext에서 계산됩니다. |
claims |
JSON 오브젝트. JSON 특성 값은 모든 유형이 될 수 있습니다. | 아니오 | 일반적으로, 사용자 권한 상에서, 생성되는 ID 토큰은 사용자가 의도 ID에 의해 식별되는 트랜잭션을 허가했다는 일부 표시를 포함합니다. claims은(는) JSON 오브젝트 또는 맵이며 여기서 키는 청구 이름이고 값은 JSON 호환 가능 구조(예: 문자열, 정수, 다른 오브젝트, 배열 또는 기타 구조)가 될 수 있습니다. 다중 청구를 지정할 수도 있습니다. |
scope |
문자열 | 아니오 | 요청이 승인되면 이 값이 권한 부여된 범위에 추가됩니다. |
금액 또는 통화와 같은 추가 속성은 사용자 정의 속성으로 처리됩니다. 나중에 설명되는 해당 템플리트 매크로를 사용하여 사용자 승인 페이지에 표시할 수 있습니다.
영국 오픈 뱅킹 예제
- 제3자 제공자에 상주하며 지불 거래를 시작하는 지불 개시 서비스 제공자(PISP).
- 계정 정보 서비스 공급자(ASPSP) 권한 서버. 이 시나리오에서 ASPSP는 Verify입니다.
- 지불 개시 API를 호스팅하는 ASPSP 자원 서버.
- 의사 ID를 추출합니다.
- 자원 서버에서 이 트랜잭션에 대한 정보를 검색합니다.
- 요청에서 의도 ID 추출하기
- 이 예제는
claims을(를) 통해 의도 ID를 전송하는 UK Open Banking 표준을 따릅니다. 수신 권한 요청에 청구의openbanking_intent_id이(가) 포함되어 있습니다.
청구 컨텍스트에서 청구가 추출되어 사용 가능하게 됩니다. 값을 검색하는 데 사용되는 코드는 다음과 같습니다.{ "id_token": { "openbanking_intent_id": { "value": "b508f9df-799b-4120-a13e-5d09f2931fa6", "essential": true } } }requestContext.getValue('claims_idtoken_openbanking_intent_id') - 트랜잭션 정보 검색
- 트랜잭션 정보는 계정 서비스 지불 서비스 제공자(ASPSP) 자원 서버에 저장되는데, 이는 동의 또는 의사 ID가 생성된 곳입니다. HTTP 클라이언트를 사용하여 자원 서버에 요청합니다. 다음 요청이 예제입니다.
hc.getAsJSON("https://resource.myaspsp.com/internal/intents/" + context.intentID - 개인정보 보호정책 및 클레임에 대한 트랜잭션 맵핑
- 은행 지불 개시 및 계정 액세스 계약을 캡처하려면 관련 개인정보 보호정책을 작성해야 합니다. 예를 들어, 지불 시작 승인 요청에 대해
payment_initiation개인 정보 보호 목적을 작성해야 합니다. 그런 다음 이 목적은 리턴 오브젝트의type특성에 맵핑됩니다.또한 UK Open Banking의 경우,openbanking_intent_id청구를 작성해야 합니다. 트랜잭션에 대한 나머지 정보를 리턴 오브젝트에 추가할 수도 있습니다.{ "type": "payment_initiation", "intentID": "b508f9df-799b-4120-a13e-5d09f2931fa6", "currency": "USD", "amount": "1200.35", "merchant": "Merchant A", "claims": { "openbanking_intent_id": "b508f9df-799b-4120-a13e-5d09f2931fa6" } } - 샘플 맵핑 규칙
statements: - if: match: "!has(requestContext.claims_idtoken_openbanking_intent_id)" return: null - context: "intentID := requestContext.getValue('claims_idtoken_openbanking_intent_id')" - context: 'intentContext := hc.getAsJSON("https://resource.myaspsp.com/internal/intents/" + context.intentID, { "Authorization": "apikey supersecretapikey" })' - return: >- { "type": context.intentContext.type, "intentID": context.intentID, "currency": context.intentContext.instructedAmount.currency, "amount": context.intentContext.instructedAmount.amount, "merchant": context.intentContext.creditorName, "claims": { "openbanking_intent_id": context.intentID } }
동의 페이지 사용자 정의
거래 승인에 대한 동의 사용자 경험은 표준 ‘ OAuth ’ 및 ‘Open ID Connect’ 범위 동의와 다르므로, 동의 페이지 템플릿에 사용자 지정 섹션을 생성할 수 있습니다. 자세한 내용은 ‘ OpenID 페이지의 싱글 사인온(SSO) 수정’을 참조하십시오.
[RPT purpose_payment_initiation]
<input type="hidden" name="@PRIVACY_SCOPE_PNAME_REPEAT@"
value="@PRIVACY_SCOPE_REPEAT@" privacy-readonly="true" />
<input type="hidden" id="@PRIVACY_SCOPE_PNAME_REPEAT@_state" name="@PRIVACY_SCOPE_PSTATE_REPEAT@"
value="CONSENT_ALLOW" privacy-required="@PRIVACY_SCOPE_REQUIRED_REPEAT@" />
<div id="@PRIVACY_SCOPE_PNAME_REPEAT@_widget" class="bx--form-item" style="width:350px;"></div>
<div class="bx--grid" style="padding-left:0">
<div class="bx--row" style="padding-bottom:6px;">
<div class="bx--col-sm-1">Amount</div>
<div class="bx--col">@PRIVACY_SCOPE_CUSTOM_currency@ @PRIVACY_SCOPE_CUSTOM_amount@</div>
</div>
<div class="bx--row" style="padding-bottom:6px;">
<div class="bx--col-sm-1">Merchant</div>
<div class="bx--col">@PRIVACY_SCOPE_CUSTOM_merchant@</div>
</div>
<div class="bx--row" style="padding-bottom:6px;">
<div class="bx--col-sm-1">Reference</div>
<div class="bx--col">@PRIVACY_SCOPE_ATTRVALUE_REPEAT@</div>
</div>
</div>
[ERPT purpose_payment_initiation]다음과 같은 점을 주목하자.- 특정 데이터 개인정보 보호 용도로 사용되는 반복 가능한 새 섹션입니다. 사용되는 이름은
purpose_{purposeID}형식을 따릅니다.purposeID은(는) 데이터 개인정보 보호 목적 ID입니다. 이 목적 ID는 시스템 생성 또는 사용자 제공일 수 있습니다. - 두 개의 HTML 양식 필드는 필수이며 이름은
@PRIVACY_SCOPE_PNAME_REPEAT@및@PRIVACY_SCOPE_PNAME_REPEAT@_state입니다. 첫 번째 필드에는 승인 레코드의 Verify ID가 포함됩니다. 두 번째 필드에는 승인 상태가 포함됩니다. - 고급 규칙에 의해 리턴되는 사용자 정의 속성은
@PRIVACY_SCOPE_CUSTOM_{attributeName}@매크로를 사용하여 참조할 수 있습니다. 예를 들어,@PRIVACY_SCOPE_CUSTOM_currency@은(는) 의도 고급 규칙으로 리턴되는 통화 값으로 대체됩니다.