고정된 환불 예제 고르기
다운로드에 나온 미리 만들어 둔
환불 예제를 받거나 리스펙스 저장소의 examples/refund-workspace를
사용하세요. 아카이브와 저장소 디렉터리는 같은 고정 구성원 목록을 가집니다.
모든 키와 생성 산출물은 변경하지 않는 그 디렉터리 밖에 두세요.
예제에는 서로 다른 환불 규칙 두 개가 있습니다.
| 경로 | 소스 | 입력 형태 | 결과 |
|---|---|---|---|
| 결정 교환 | generated/exchange/refund-window.lspx | 일반 JSON 레코드 | allow 또는 deny |
| 바우치 | generated/vouch/refund-window-native.lspx.png | 검사 입력 값 | approve 또는 deny |
결정 교환과 바우치는 같은 업무 예제를 사용하면서 규칙과 결과와 식별자와 영수증과 정책과 권한 기록을 각각 소유합니다.
일을 시작하기 전에 예제 검사하기
압축을 푼 예제 루트나 저장소 디렉터리로 들어가세요. 호출자가 소유한 별도 작업 루트를 만든 뒤 네이티브가 고정 구성원 목록을 검사하게 합니다.
mkdir -p ../refund-work
lispex workspace status --dir . --work-dir ../refund-workworkspace status는 작업 슬롯을 보여주기 전에 정확한 구성원 목록을
검사합니다. present-unchecked로 나온 슬롯은 존재할 뿐입니다. 검증됨, 신뢰함,
신선함, 허가됨을 뜻하지 않습니다.
선언한 한도 아래에서 결정 교환 실행하기
결정 교환 경로는 준비 한도와 평가 한도를 분리해서 사용합니다. 원시 규칙 소스를 저장하지 않고 다섯 구성원 결정 디렉터리를 씁니다.
mkdir -p ../refund-work/exchange
lispex rule run \
--source ./generated/exchange/refund-window.lspx \
--input ./generated/exchange/inputs/day-14-unopened.json \
--prepare-limits ./generated/exchange/prepare-limits.json \
--eval-limits ./generated/exchange/evaluation-limits.json \
--out ../refund-work/exchange/decision
lispex rule inspect --dir ../refund-work/exchange/decision
lispex rule verify --dir ../refund-work/exchange/decision
lispex rule replay --dir ../refund-work/exchange/decision검사와 검증은 규칙을 실행하지 않습니다. 재실행은 규칙을 실행하는 내장
프로그램의 새 인스턴스 하나를 만들고 같은 결과를 요구합니다. 이식 가능한
결과는 계속 vouch_eligible false입니다.
로컬 발급자와 독립된 수신자 준비하기
개인 키는 예제 디렉터리와 작업 루트 바깥에서 호출자가 소유하는 디렉터리에 만드세요.
mkdir -p ../refund-issuer ../refund-recipient
lispex key generate --out-dir ../refund-issuer/key
lispex key inspect --public-key ../refund-issuer/key/public.spki.der한 컴퓨터에서 따라 하는 이 연습에서는 검토한 공개 SPKI만 수신자 디렉터리로 복사하고 복사된 바이트를 다시 검사합니다.
cp ../refund-issuer/key/public.spki.der \
../refund-recipient/reviewed-issuer.spki.der
lispex key inspect \
--public-key ../refund-recipient/reviewed-issuer.spki.der실제 발급자와 수신자는 별도로 고른 전달 및 검토 채널이 필요합니다. 로컬
복사는 따라 하기 위한 편의일 뿐 신뢰 절차가 아닙니다. private.pkcs8.der를
예제 디렉터리, 작업 루트, 수신자 디렉터리, 소스 관리, 묶음에 넣지 마세요.
수신자는 독립적으로 검토한 사실 네 개로 결정 정책을 만듭니다. 앞으로 인증할 묶음에서 어느 값도 가져오지 않습니다.
lispex decision policy create \
--public-key ../refund-recipient/reviewed-issuer.spki.der \
--semantic-rule-sha256 14bb6f2e43cee011aedbeafc71d3716789bea8117e8331cd6a7feb1858d7418f \
--semantic-profile-id lispex/r7rs-rule-embedded-core/1 \
--engine-artifact-sha256 fa6e52559e1f5a43e50a3b7ac0cc5add6930cff0aed8aaff462cff4609362870 \
--portable-core-schema lispex.embed-receipt-core/v1 \
--consumer-label refund-recipient \
--out ../refund-recipient/decision-policy.json
lispex decision policy check \
--policy ../refund-recipient/decision-policy.json정책 생성은 허용한 발급자 key와 의미 profile과 평가기와 휴대 코어 schema를 기록합니다. 주변 애플리케이션은 key를 발급자 조직에 연결하고 중복 사용과 행동 정책을 소유합니다.
이식 가능한 결정 발행하고 인증하기
휴대 코어란 규칙과 입력, 한도, 결과를 한데 묶어 둔 부분입니다. 발급자는 이미
검증한 휴대 코어에 서명하고 정해진 바이트 예산의 .lpxdecision 파일 하나를 씁니다.
lispex decision issue \
--dir ../refund-work/exchange/decision \
--private-key ../refund-issuer/key/private.pkcs8.der \
--issuer-label refund-issuer \
--out ../refund-work/exchange/refund.lpxdecision수신자는 자기 정책을 사용하고 받은 묶음을 명시합니다.
lispex decision inspect \
--bundle ../refund-work/exchange/refund.lpxdecision
lispex decision authenticate \
--bundle ../refund-work/exchange/refund.lpxdecision \
--policy ../refund-recipient/decision-policy.json
lispex decision replay \
--bundle ../refund-work/exchange/refund.lpxdecision \
--policy ../refund-recipient/decision-policy.json인증은 허용된 정확한 키가 정확한 결정 재료에 서명했음을 확인합니다. 재실행은 새로운 평가를 더합니다. 어느 쪽도 신선도, 재전송 방지, 조직 신원, 외부 행동 허가를 제공하지 않습니다.
samples/recipient 아래 파일에는 sample-do-not-trust가 영구적으로
표시되어 있습니다. 명령을 연습할 때만 유용하며 실제 수신자 정책이나 신뢰
기반으로 삼으면 안 됩니다.
별도 리스펙스 이미지 기반 바우치 경로 시작하기
이 경로는 검사 입력과 정확한 리스펙스 이미지에서 다시 시작합니다. 결정 교환
결과, 결정 디렉터리, 결정 정책, .lpxdecision 묶음을 소비하지 않습니다.
바우치 식별자 입력 네 개를 먼저 검사하세요.
mkdir -p ../refund-work/vouch
lispex vouch source-id \
--source-image ./generated/vouch/refund-window-native.lspx.png
lispex vouch input-id \
--input ./generated/vouch/inputs/day-14-unopened.checked.json
lispex vouch key-id \
--public-key ../refund-recipient/reviewed-issuer.spki.der
lispex vouch engine-id \
--executable /absolute/path/to/lispex정확한 엔진 출력을 검토한 뒤 출력된 전체 값을 ENGINE_ID에 넣으세요. 같은
검토 공개 키를 가리키더라도 바우치 정책은 결정 정책과 별개입니다.
ENGINE_ID="sha256:<reviewed-native-engine-digest>"
lispex vouch policy create \
--public-key ../refund-recipient/reviewed-issuer.spki.der \
--engine-sha256 "$ENGINE_ID" \
--source-image ./generated/vouch/refund-window-native.lspx.png \
--out ../refund-work/vouch/policy.json
lispex vouch policy check \
--trust-policy ../refund-work/vouch/policy.json보존된 따라 하기 입력을 정확한 이미지에서 발행합니다. --profile 값
csk.checked-profile/v1은 바우치에 참여하는 폼을 정한 고정 검사 프로필입니다.
ISSUER_KEY_URI="pkcs8-file:///absolute/path/outside-workspace/refund-issuer/key/private.pkcs8.der"
lispex vouch issue \
--source-image ./generated/vouch/refund-window-native.lspx.png \
--input ./generated/vouch/inputs/day-14-unopened.checked.json \
--profile csk.checked-profile/v1 \
--key-handle "$ISSUER_KEY_URI" \
--out-dir ../refund-work/vouch/issued \
--emit-bundle보존된 검사 입력에는 [14, false]만 들어 있습니다. 여기서 발행한 묶음은
따라 하기 전용입니다. 요청 ID, 행위자, 행동, 만료를 묶지 않으므로
애플리케이션 인수인계에서 다시 쓸 수 없습니다.
현재 요청 값 여섯 개를 묶는 전용 묶음 발행하기
다음과 정확히 같은 바이트와 마지막 줄바꿈 하나를 가진 호출자 소유 파일을
만드세요. input 필드 값 csk.checked-input/v1은 검사 입력 파일의 고정된
형태를 가리키는 이름이고, value에 입력 자체가 들어갑니다.
{
"input": "csk.checked-input/v1",
"value": [
14,
false,
"request-123",
"operator-7",
"refund",
1785600000
]
}파일을 ../refund-work/app/current-request.checked.json에 두세요. 여섯 값을
모두 묶는 새 묶음을 발행합니다.
mkdir -p ../refund-work/app
lispex vouch issue \
--source-image ./generated/vouch/refund-window-native.lspx.png \
--input ../refund-work/app/current-request.checked.json \
--profile csk.checked-profile/v1 \
--key-handle "$ISSUER_KEY_URI" \
--out-dir ../refund-work/app/current-request-issued \
--emit-bundle환불 규칙은 앞의 두 값만 읽습니다. 바우치 입력 식별자와 서명 문맥은 여섯 값을 정확히 모두 묶습니다. 바깥 애플리케이션은 신뢰하는 server state에서 행위자를 인증하고 고유한 요청을 예약합니다.
정확한 현재 요청으로 새 게이트 실행하기
수신자는 전용 묶음, 자기 정책, 정확한 이미지, 같은 여섯 값 검사 입력을 서로
독립적으로 제공합니다. 게이트는 새로운 로컬 실행을 관측하고 approve를
요구합니다.
lispex vouch gate \
--bundle ../refund-work/app/current-request-issued/vouch-input-bundle.json \
--trust-policy ../refund-work/vouch/policy.json \
--source-image ./generated/vouch/refund-window-native.lspx.png \
--input ../refund-work/app/current-request.checked.json \
--profile csk.checked-profile/v1 \
--require-decision approve \
--report-out ../refund-work/app/current-request-gate.json저장된 검증 보고서나 게이트 보고서는 관측한 요청을 기록합니다. 새 요청은 자기 소스와 입력과 정책과 보고서로 새 게이트를 시작합니다.
애플리케이션 인수인계 완성하기
종료값 0인 게이트는 살아 있는 인증된 현재 실행과 요구 결정이 로컬에서 한 번 일치했음을 세웁니다. 애플리케이션은 호출자 인증과 행위자·행동 정책과 server time과 요청 예약과 exactly-once transaction 처리를 제공합니다.
애플리케이션 인수인계 예제는 바깥 애플리케이션이 server 소유 사실을 묶고
덮어쓰지 않는 would_act 레코드를 공개한 뒤 business adapter로 외부 행동을
수행하는 연결 지점을 보여 줍니다.