Documentation menu

보안 및 접근 취소

비밀번호가 아닌 토큰

어시스턴트를 연결해도 MailInApp 비밀번호나 API 키가 넘어가는 일은 절대 없습니다. 동의 화면을 승인하면 사용자가 체크한 권한으로 범위가 정확히 제한되고, 선택한 계정에 정확히 묶인 OAuth 액세스 토큰이 발급됩니다. 토큰은 해시 처리되어 저장되는 불투명한 무작위 문자열입니다 — MailInApp이 개발자 API 키에 이미 사용하는 것과 동일한 방식이므로, 데이터베이스를 읽어도 사용 가능한 자격 증명을 복원할 수 없고, 취소는 만료를 기다리지 않고 즉시 이루어집니다.

  • 액세스 토큰은 1시간 동안 유지됩니다.
  • 리프레시 토큰은 60일 동안 유지되며 사용할 때마다 회전합니다 — 새 토큰이 발급되는 순간 이전 토큰은 작동을 멈추며, 이미 회전되어 무효화된 리프레시 토큰이 재사용되면(유출되었다는 신호이므로) 해당 토큰뿐 아니라 연결 전체가 자동으로 취소됩니다.

발송 전 2단계 확인

campaigns:send가 부여되었다고 해서 어시스턴트가 한 번의 단계로 연락처에 메일을 보낼 수 있는 것은 아닙니다. 발송은 항상 두 개의 별도 도구 호출을 거칩니다:

  1. **prepare_send**는 수신자를 확정하고, 수신 거부 목록을 적용하고, 실제 미리보기를 렌더링합니다 — 아무것도 발송하지 않으므로 읽기 전용으로 어노테이션됩니다. 수신자 수, 주소 샘플, 렌더링된 HTML, 그리고 해당 프로젝트·제목·수신자에 정확히 묶인 단명 confirmationToken을 반환합니다.
  2. **confirm_send**는 그 정확한 토큰과, 토큰이 발급된 것과 정확히 동일한 프로젝트/제목/수신자를 요구합니다. 제목이 다르거나, 행 선택이 다르거나, 토큰이 만료되었거나(10분 제한) 하는 등 조금이라도 불일치하면 그대로 거부됩니다.

실질적인 효과는 이렇습니다: 어시스턴트는 무엇을, 몇 명에게 보내려는지 먼저 보여주지 않고는 메일을 발송할 수 없으며, 미리보기를 보여준 시점과 실제 발송 시점 사이에 수신자나 제목을 바꿔치기할 수도 없습니다. Claude에서는 prepare_send의 결과가 자체 Confirm & Send 버튼이 있는 실제 카드로 렌더링됩니다 — 즉 사람의 승인은 렌더링된 미리보기를 클릭하는 행위이지, 모델이 구슬려 넘어갈 수 있는 채팅 속 한 문장이 아닙니다.

이렇게 이루어진 모든 발송은 그 위에 계정의 기존 안전장치도 그대로 통과합니다: 요금제의 connectorSendRecipientsMonthly 상한(일반 월간 발송량과는 별개이며 훨씬 낮음 — Free는 0), 다른 모든 발송이 확인하는 것과 동일한 수신 거부 목록, 그리고 계정의 전체 월간 발송 상한입니다. 각각은 별도의 감사 기록으로도 남습니다.

신뢰할 수 없는 콘텐츠는 신뢰되지 않고 격리 처리됩니다

연락처 필드, 수신 메일함 메시지 본문, 폼 자유 서술 답변은 모두 사용자 본인이 아닌 다른 사람 — 수신자, 또는 지원 메일함에 메일을 보내는 누군가 — 이 작성한 것입니다. 이러한 콘텐츠를 반환하는 도구는 도구 결과 안에서 이를 신뢰할 수 없는 데이터로 명확히 감싸므로, 어시스턴트는 이를 읽고 요약할 대상으로 취급할 뿐 절대 따라야 할 지시로 취급하지 않습니다. (기술적으로 궁금한 분들을 위해 덧붙이면: 이 격리 처리는 항상 도구 결과에 있으며 도구 설명에는 절대 넣지 않습니다 — 설명에 행동 지시를 넣는 것은 커넥터 심사자들이 보자마자 거부하는 전형적인 프롬프트 인젝션 표면입니다.)

어떤 도구도 절대 닿을 수 없는 것

어떤 스코프를 부여하든 관계없이, 커넥터 도구는 API 키, 웹훅 서명 시크릿, SMTP 비밀번호, 연결된 데이터 소스의 OAuth 클라이언트 시크릿을 읽거나 재발급할 수 없고, 결제·도메인·SMTP 설정을 변경할 수 없으며, 팀 초대를 관리할 수도 없습니다. 이는 MailInApp의 다른 어디에서도 editor 팀원이 이미 접근할 수 없는 것과 정확히 동일한 예외 항목입니다. Stripe나 결제도 여기서 다루지 않습니다 — 분쟁 청구나 환불은 대시보드에서만 가능한 작업으로 남습니다.

어느 계정인지는 항상 재검증됩니다

연결은 동의 시점에 하나의 계정에 묶이며, (여러 회사 중 어느 것으로 동작할지 헤더를 읽어 그때그때 결정하는 로그인된 대시보드 세션과 달리) 이후 다시 헤더를 읽어 결정하는 일은 없습니다. 그 바인딩은 모든 개별 호출마다 사용자의 현재 팀 멤버십을 기준으로 재검증됩니다 — 팀에서 제거되거나 역할이 바뀌면, 그 연결의 바로 다음 호출은 스코프를 부여받았을 당시의 상태가 아니라 새로운 현실을 반영합니다.

연결 취소하기

대시보드의 Connections(/dashboard/connections)로 이동하세요. 승인한 모든 어시스턴트가 부여된 스코프와 마지막 호출 시각과 함께 나열됩니다. Revoke는 즉시 적용됩니다 — 해당 어시스턴트가 보유한 모든 토큰은 액세스 토큰과 리프레시 토큰을 가리지 않고 바로 다음 호출부터 작동을 멈춥니다. 플랫폼 쪽(Claude/Gemini)에서 먼저 무언가를 되돌릴 필요는 없습니다 — 여기서 취소하는 것만으로 항상 충분합니다.