요약

  • IETF에 새로 제출된 개인 초안은 사용자가 서비스의 자기 계정 화면에서 에이전트의 권한, 기간, 필요하면 호출 횟수 상한을 정하고 일회용 접속표를 직접 건네도록 제안한다.
  • 사용자가 적은 목적은 동의와 감사 기록에 남는다. 다음 API 호출의 허용 여부는 선택한 권한과 매 호출 검사가 정한다.

소원은 길게, 체크박스는 넓게

“이 청구서 한 장만 보내 줘.” 사용자는 목적 칸에 이렇게 적는다. 바로 아래에서는 모든 청구서를 수정할 수 있는 권한에 체크한다. 에이전트가 다음 호출을 시도할 때 서버가 집행할 것은 어느 쪽일까. 체크된 권한이다. Christopher Emerson의 개정 초안은 이 어색한 장면을 숨기지 않는다. 문장은 사람이 바라던 일을 기록하고, 구조화된 선택지는 기계가 할 수 있는 일을 정한다. 둘을 비슷한 색으로 칠해 놓으면 동의 화면이 아니라 소원 접수 창구가 된다.

10월 27일 발표는 개정판 01을 알렸다. IETF Datatracker에는 RFC 절차나 IETF 승인 없이 제출된 개인 Internet-Draft로 올라 있다. 제안의 시작점은 에이전트 채팅창이 아니다. 사용자가 데이터를 보관한 서비스에 직접 로그인해 연결 관리 화면을 연다. 서비스는 그 사람에게 이미 있는 권한을 기준으로 허용 가능한 범위를 계산한다. 사용자는 범위와 기간을 고르고, 원하면 자원 묶음별 호출 횟수 상한을 정한다. 예전에 준 권한도 함께 살펴보고 필요 없는 연결을 취소할 수 있다.

선택 사항인 본인 확인 절차에서는 인증기가 정확한 권한, 기간, 횟수, 화면에 제시된 목적과 사용자의 글을 묶은 내용에 서명한다. 서비스는 수명이 짧고 한 번만 쓰는 접속표를 딱 한 번 보여 준다. 사용자가 그것을 에이전트에게 전달하면 에이전트는 제한된 접근 토큰으로 교환한다. 스스로 연장할 길은 없다. 새 권한을 만들고 넘기는 순간을 사람 쪽에 두는 것이 이 설계의 핵심이다.

글은 따라가고, 문은 숫자와 범위가 지킨다

개정판 01은 서비스가 선언한 목적과 사용자가 자유롭게 쓴 의도를 따로 다룬다. 두 글은 동의, 호출 검사, 감사, 철회 기록에 남는다. 정책 엔진에 넣어 권한으로 번역하지 않는다. 초안은 자유 서술을 근거로 권한을 넓히지 말라고 하고, 자동 해석은 사람이 검토할 때 참고할 신호로만 둔다. 같은 논리로 “한 장만”이라는 문장도 넓게 체크한 수정 권한을 저절로 좁히지 않는다. 서비스가 그 한 장을 고를 수 있는 권한 항목을 만들거나, 실제 보내기 앞에서 다시 확인해야 한다.

토큰을 받은 뒤에도 매 API 호출은 introspection을 거쳐 선택된 범위와 횟수 한도를 확인받고 기록된다. 서비스는 특정 작업에 매번 확인을 요구할 수 있다. 그런 호출은 잠시 멈추고 정확한 요청 내용을 다이제스트로 묶는다. 사용자가 자기 쪽 화면에서 인증기로 그 요청을 승인하면, 에이전트가 승인 식별자를 붙여 다시 시도한다. 거절한 요청은 그대로 끝난다. 연결을 철회하면 대기 중인 승인도 사용할 수 없다. “청구서를 다룰 수 있다”는 일반 권한과 “이 청구서를 지금 보낸다”는 별도 결정이 여기서 갈라진다.

초판 00에도 사람이 직접 접속표를 건네는 구상이 있었다. 01판은 호출 상한, 기존 권한 검토, 본인 확인, 작업별 승인, 철회 뒤 처리, 자유 서술의 역할을 더 구체화했다. 저자가 운영하는 구현도 소개하지만 모든 통제의 독립적 적합성 검사는 제시하지 않는다. 초안 스스로 인정한 약점도 있다. 에이전트가 승인 화면을 제어할 수 있다면, 인증기를 누른 사실만으로 사용자가 실제로 무엇을 봤는지 증명할 수 없다.

원자료