OAuthクライアントシークレットを安全に共有する

閲覧後に自己消滅する暗号化リンクで、OAuthクライアントシークレットとサービスアカウント認証情報を送ろう。

問題

OAuthクライアントシークレットとサービス認証情報は、サードパーティAPI、決済処理、外部インテグレーションへのアクセスを制御する。Slackスレッドやメールチェーンでシェアされたこれらのシークレットは、多くの場合複数チームにまたがる検索可能なログに残り続ける。漏洩したクライアントシークレットにより、攻撃者がアプリケーションになりすましてユーザーデータを大規模に取得できる可能性がある。

Vaulted のサポート内容

VaultedはブラウザでクライアントシークレットをAES-256-GCMで暗号化し、自己消滅リンクを生成する。ゼロ知識アーキテクチャにより、サーバーは平文の認証情報に一切アクセスできない。リンクは閲覧後に期限切れとなり、クライアントシークレットがメッセージアーカイブに残ることを防ぐ。

手順

  1. OAuthクライアントシークレットまたはサービス認証情報をVaultedに貼り付ける
  2. 必要とする開発者の数に適した閲覧回数制限を設定する
  3. インテグレーションを設定するチームに暗号化リンクを共有する
  4. 相手が認証情報をアプリケーション設定にコピーし、リンクは期限切れとなる

コマンドラインからクライアントシークレットを共有する

ブラウザを開かずにVaulted CLIでOAuthクライアントシークレットを共有できる: npx vaulted-cli "client_id:client_secret" --views 1 --expires 1h。WebアプリとまったくのAES-256-GCM暗号化。npmでインストール: npm install -g vaulted-cli。

GitHub Actionsでクライアントシークレットを共有する

Vaulted GitHub ActionでCI/CDのサービス認証情報を共有できる: uses: vaulted-fyi/share-secret@v1 でクライアントシークレットをinputとして設定する。エンドツーエンド暗号化、自己消滅リンク――ワークフローログに平文は残らない。GitHub Marketplaceで公開中。