content 스코프가 필요하고, 스코프드 리소스에는 서버가 특정 사용자·조직·역할 기준으로 접근 규칙을 평가할 수 있도록 onBehalfOf 주체가 필요합니다.
onBehalfOf가 왜 필요한가
PAT은 서비스 토큰이라 최종 사용자가 붙어 있지 않습니다. 스코프드 메모리 스페이스와 지식 폴더는 주체(user_id, org_id, role, …)를 축으로 하는 접근 규칙이 걸려 있습니다. 주체가 없으면 서버가 규칙을 평가할 근거가 없어서, 조용히 전부를 돌려주는 대신 요청을 거절합니다.
스코프드 리소스에는 모든 읽기·쓰기에 onBehalfOf를 넘기세요. 스코프 없는 스페이스·폴더는 없이도 동작하지만, 감사 트레일이 얇아집니다(PAT 소유자만 남고, 실제 최종 사용자가 안 남음).
memory
memory.read
onBehalfOf앱이 주장하는 주체. 스코프드 스페이스에 필수. 거절된 요청은NoraAccessError를 던집니다.scope선택 추가 필터 ({ key: value }맵이 스페이스의 스코프 스키마와 매칭).
memory.write
knowledge
knowledge.upload
folder문서가 들어갈 지식 폴더 태그. 필수.onBehalfOf폴더의 접근 규칙에 쓸 주체. 접근 규칙 걸린 폴더에 필수.
nora documents upload와 같은 서버 경로입니다. 파일이 청킹·벡터화되고, PAT 소유자와 onBehalfOf 주체 둘 다 감사에 남습니다.
knowledge.list
onBehalfOf)가 볼 수 있는 문서를 나열합니다. SDK에는 아직 페이지네이션이 없습니다. 큰 라이브러리엔 --limit / --offset을 지원하는 nora documents list를 쓰세요.
흔한 패턴
인증 레이어에서 요청마다 주체를 넘기기
앱이 이미 아는 호출자 정보를 넘기세요.NoraAccessError입니다. 던지지 말고 잡아서 다운그레이드할 수 있습니다.
공유 주체로 대량 업로드
오퍼레이터 하나가 시작한 배치 인제스트라면, 주체는 오퍼레이터입니다. 문서가 대상으로 하는 최종 사용자가 아닙니다.nora documents upload-folder를 권합니다. 같은 서버 경로에 재시도·진행 표시를 얹어 배치합니다.
스코프 없는 스페이스·폴더
접근 규칙이 없는 스페이스·폴더에는onBehalfOf가 선택입니다. 하지만 그래도 넘기면 감사 트레일이 좋아집니다(항목에 오퍼레이터가 누구를 대신했는지 함께 남습니다).
스코프
memory.read/memory.writePATcontent.knowledge.upload/knowledge.listPATcontent.onBehalfOf없는 스코프드 리소스 거절입니다 (NoraAccessError).