最初に思ったのは、これは地味だけどかなり筋がいい変更だな、ということだった。OAuthの同意画面って、結局のところ「全部許すか、全部やめるか」になりがちで、特にagentやMCP serverみたいにやたら広い権限をまとめて欲しがる相手には、ユーザー側が白か黒かで判断するしかなかった。そこに「この権限は外してよい」と開発者が印を付けられるのは、かなり現実的だと思う。
面白いのは、これがユーザーの自由を広げる話に見えて、実際には開発者の責任を少し増やすところだ。ユーザーが optional scope を外したら、アプリは「まあ動くはず」では済まない。返ってきた token の scope を見て、足りない機能はちゃんと落とす必要がある。つまり、同意画面で頑張るだけではなく、その後の振る舞いまで設計に入れないといけない。ここは、表向きの UX 改善よりもずっと実装の癖が出る部分だと思う。
それにしても、agent のための権限設計ってやっぱり難しい。人間なら「このアプリは在庫を見るだけ」と説明されれば想像できる。でも agent は、将来その権限をどう使うかを全部まとめて請求してくる。読む限り、Cloudflare はその不自然さをかなり真面目に扱っている。OAuth 自体を作り直すのではなく、既存の仕組みの中で「拒否されやすい権限」と「本当に必要な権限」を分ける方向に寄せたのは、実装の現実感があるやり方だと思う。
一方で、これで問題が解けるわけでもないとも感じた。ユーザーに見せる判断材料が増えるのはいいけれど、optional にした scope をどこまで信用していいのか、どの機能を graceful degradation にするのかは、結局サービスごとの作り込みになる。便利そうに見える反面、「権限が足りないときにどう振る舞うか」を雑にしているアプリは、むしろエラーが目立つようになるはずだ。そこは少し怖い。
参考: Cloudflare Adds Optional OAuth Scopes, Letting Developers Mark What Users May Decline