セキュリティと接続の取り消し
パスワードではなくトークン
アシスタントを接続しても、MailInAppのパスワードやAPIキーが渡されることは決してありません。同意画面を承認すると、あなたがチェックした権限だけに限定され、あなたが選んだアカウントだけに紐づく、OAuthアクセストークンが発行されます。トークンは不透明なランダム文字列としてハッシュ化して保存されます——これは開発者向けAPIキーで既に使われているのと同じ方式で、データベースを読み取っても使用可能な認証情報を復元できず、取り消しも期限切れを待つことなく即座に行われます。
- アクセストークンは1時間で失効します。
- リフレッシュトークンは60日間有効で、使用ごとにローテーションします——古いトークンは新しいトークンが発行された瞬間に使えなくなり、ローテーション済みのリフレッシュトークンが再び使われた場合(漏洩の兆候)、その1つのトークンだけでなく接続全体が自動的に取り消されます。
送信前の2段階確認
campaigns:sendが許可されているからといって、アシスタントが一度の操作であなたの連絡先にメールを送れるわけではありません。送信は常に2つの別々のツール呼び出しを経由します:
prepare_sendはオーディエンスを解決し、サプレッションを適用し、実際のプレビューをレンダリングします——何も送信しないため、読み取り専用としてアノテーションされています。受信者数、アドレスのサンプル、レンダリング済みのHTML、そしてその正確なプロジェクト・件名・オーディエンスに紐づいた、短命なconfirmationTokenを返します。confirm_sendは、その正確なトークンと、それが発行されたときとまったく同じプロジェクト/件名/オーディエンスを必要とします。件名が違う、選択した行が違う、トークンの期限が切れている(10分の期限)など、少しでも一致しないものはすべて拒否されます。
実際的な効果としては、アシスタントは何をどれだけの人数に送ろうとしているかを先に提示しなければ送信できず、プレビューを見せてから実際に送信するまでの間にオーディエンスや件名を差し替えることもできません。Claudeでは、prepare_sendの結果は専用のConfirm & Sendボタンを備えた実際のカードとしてレンダリングされます——つまり人間による承認は、レンダリングされたプレビュー上のクリックであり、モデルが言い逃れられるようなチャット中の一文ではありません。
この方法で行われるすべての送信は、それに加えてあなたのアカウントの既存の保護機能もすべて通過します: あなたのプランのconnectorSendRecipientsMonthly上限(通常の月間送信ボリュームとは別に、それよりずっと低く設定されています——Freeでは0)、他のすべての送信がチェックする同じサプレッションリスト、そしてアカウント全体の月間送信上限です。それぞれが独自の監査記録としても記録されます。
信頼できないコンテンツはフェンス処理され、信頼はされない
連絡先のフィールド、受信したメールボックスのメッセージ本文、フォームの自由記述の回答は、いずれもあなた以外の人物——受信者や、あなたのサポート受信箱にメールを送る誰か——によって書かれたものです。このコンテンツを返すツールは、ツールの結果の中でそれを明確に信頼できないデータとして囲み込むため、あなたのアシスタントはそれを読んで要約するべきものとして扱い、従うべき指示としては決して扱いません。(技術的に興味がある方向けに: このフェンス処理はツールの結果の中にのみ存在し、ツールの説明文の中には決して置かれません——説明文の中に振る舞いに関する指示を書くことは、コネクタのレビュアーが一目で拒否するプロンプトインジェクションの典型的な攻撃面そのものだからです。)
どのツールも決して到達できないもの
どのコネクタツールも——どのスコープを許可していても——APIキー、Webhookの署名シークレット、SMTPパスワード、接続されたデータソースのOAuthクライアントシークレットを読み取ったりローテーションしたりできません。決済、ドメイン、SMTPの設定を変更することも、チーム招待を管理することもできません。これらは、editor権限のチームメイトがMailInAppの他のどこでも到達できない、まさに同じ制限を反映しています。Stripeや課金にもここでは一切触れません——争議のある請求や返金は、常にダッシュボードのみで行う操作です。
どのアカウントかは常に再確認される
接続は同意時に1つのアカウントに紐づけられ、(ダッシュボードのセッションが複数の会社を切り替えるためにヘッダーを読み直すのとは異なり)どのアカウントとして動作するかを決めるためにヘッダーを読み直すことは決してありません。この紐付けはすべての呼び出しごとに、あなたの現在のチームメンバーシップに対して再検証されます——チームから外された場合や、ロールが変わった場合、その接続の次の呼び出しは、スコープを許可した時点で真実だったことではなく、新しい実態を反映します。
接続の取り消し
ダッシュボードのConnections(/dashboard/connections)に移動してください。承認したすべてのアシスタントが、許可したスコープと最後に呼び出しがあった時刻とともに一覧表示され、Revokeは即座に反映されます——そのアシスタントが保持しているすべてのトークン(アクセストークンとリフレッシュトークンの両方)は、次の呼び出しから使えなくなります。先にプラットフォーム側(Claude/Gemini)で何かを行う必要はありません——ここで取り消すだけで常に十分です。