一時的な停止でアクセスが残る理由
連携をすばやく止めたいとき、まず思いつくのは一時停止やアンインストールです。これでインストール側は処理できます。しかし認可側は自動では処理されません。認可は所有者が異なる別の付与だからです。
インストール済みのGitHub Appを一時停止すると、そのインストールアカウントが所有するリソースへのアクセスが一時的に遮断されます。Source
この区別が重要なのは、GitHub Appが同時に2種類のアクセスを持てるからです。アカウントのリソースへのインストールアクセスと、個人の代理として動作するためのユーザー認可です。片方を止めても、もう片方は止まりません。
一時停止は、アプリがユーザーの代理として動作するための別個の認可を削除しません。Source
インストールアクセスとユーザー認可の違い
実際に変更すべき側を判断するには、次の表を使ってください。
| 止めたいこと | 確認する側 | 一時停止がすること | 一時停止がしないこと |
|---|---|---|---|
| アプリがインストール元アカウント所有のリソースに到達すること | そのアカウントのインストール | そのインストールのアクセスを一時的に遮断する | ユーザー認可を削除する |
| アプリが個人の代理として動作すること | そのユーザーの「認可済みのGitHub App」 | それ自体では何もしない | ユーザーレベルの認可を止める |
| 1つのアカウントについて両方 | 両方の側 | インストール側だけをカバーする | もう一方の付与を残す |
GitHub Appは、単にログアウトできるアクティブなブラウザセッションではありません。インストールの一時停止はリソースに対するアカウントレベルの制御であり、認可解除は委任された動作に対するユーザーレベルの制御です。これらは別々に管理され、別々に確認すべきものです。
一時的な停止のための実践チェックリスト
- まず目的を明確にする。 アプリがアカウントのリソースに到達することを止めるのか、個人の代理として動作することを止めるのか、あるいは両方なのかを決めます。答えによって触る側が決まります。
- インストール側を処理する。 保護したいリソースを所有するアカウントでインストールを一時停止します。これは一時的で元に戻せるものとして扱います。
- ユーザー側を別に確認する。 アプリがあなたの代理として動作することを認可していて、それを止めたい場合は、「認可済みのGitHub App」に移動してそこで認可を解除します。一時停止がこれをカバーしたと決めつけないでください。
- 何をどこで変更したか記録する。 どのアカウントのインストールを一時停止したか、どのユーザー認可を(あれば)削除したかを記録します。これにより、後の後片付けで2つのうち片方が漏れるのを防げます。
- 意図的に元に戻す。 一時停止が一時的なものだった場合、ユーザー認可も復元すべきか確認してからインストールを再有効化します。
アンインストールは一時停止より強いが、範囲は限られる
一時的な停止で足りず、インストール自体をなくしたい場合は、アンインストールがインストール側のより強い操作です。それでもユーザー認可には単独では届きません。
アンインストールはそのアカウントのインストールアクセスを削除します。所有者がアプリに自分の代理として動作することを止めさせたい場合、「認可済みのGitHub App」での認可解除は別の操作です。Source
実務上の帰結はこうです。アンインストール後、所有者がアプリに自分の代理として動作することを止めさせたい場合は、「認可済みのGitHub App」を確認してください。一方の接続を削除しても、もう一方がなくなった証拠にはならず、ある場所に表示されなくなったアプリがもう一方の付与をまだ持っている可能性があります。
よくある失敗パターン
- 一時停止を完全な取り消しとみなす。 一時停止が遮断するのはインストールのリソースアクセスだけです。ユーザー認可は、あなたが対処するまで残ります。
- 認可解除をアンインストールと同一視する。 認可解除はアプリがあなたの代理として動作することを止めますが、アカウント上のインストールは残ることがあります。停止に実際にどちらが必要か決めてください。
- 片方のアカウントを片付けて、もう片方を忘れる。 インストールはアカウントに属し、認可はユーザーに属します。片方の側だけを挙げた停止計画は、通常もう片方を未処理のまま残します。
- 早すぎる再有効化。 アンインストールではなく一時停止した場合、ユーザー側を確認する前にインストールを復元すると、リソースアクセスが戻ってしまいます。
完了と言う前に両方の側を確認する
停止が完了したと言えるのは、変更するつもりだった各側をそれぞれの基準で確認したときだけです。所有アカウントでインストールの状態を確認し、次に対象ユーザーの「認可済みのGitHub App」で認可の状態を確認します。片方からもう片方を推測しないでください。また、アプリを「ログアウトした」と表現しないでください。それはブラウザセッションではありませんでした。
次の作業が古いOAuth付与の削除で、それをログインセッションと切り離して考えたい場合は、ログインセッションと混同せずに古いGitHub OAuthアプリを取り消すに関する関連ガイドで、その別の後片付け手順を扱っています。