ウェブブラウザのプライバシー保護対策の動向を把握するために、W3CのPrivacy Community Groupの各提案を読み進めている。自分の頭の整理用にまとめている資料を公開する。今回はIsLoggedInについて。
概要
現在のWebの振る舞いは「デフォルトでログイン状態」(websiteはロードされた時点で、cookie等を利用してユーザーの情報を実質永続的に保存できる)となっているため、プライバシー上の問題とディスク容量の問題がある。ブラウザがログイン状態を把握できるようにして、ユーザーデータの保存を制御できるようにする。
API仕様の素案 (Straw Man Proposal)
- 基本となるのは以下の3つのAPI
-
navigator.setLoggedIn(username, credentialTokenType, optionalParams) -> Promise<void>
- Websiteがログイン状態 (isLoggedIn=true) になることをブラウザに知らせる。
-
navigator.setLoggedOut(optionalUsername) –> Promise<void>
- Websiteがログアウト状態(isLoggedIn=false) になることをブラウザに知らせる。
-
navigator.isLoggedIn() –> Promise<void>
- Websiteのログイン状態をブラウザから取得する。
-
- トラッキングへの悪用を防ぐための対策として以下が例示されている。
- WebAuthnやパスワードマネージャの利用など、ログイン処理であることが明らかな操作の後にのみ
setLoggedIn
を呼び出せるようにする。 - ログイン状態にするときにユーザーに明示的な同意確認を行う。
- ログイン状態であることがわかるUI、定期的なログイン状態継続の確認を実施する。
- WebAuthnやパスワードマネージャの利用など、ログイン処理であることが明らかな操作の後にのみ
- ブラウザがログイン状態を保持するにはHTTP State TokenもしくはCookie(ブラウザへの普及をスムーズにするため)のいずれかを利用できる。
- IDフェデレーションのサポートも考慮されており、IdPのwebsiteで
navigator.initiateLoggedInFederated
を呼び出した後に、SP (RP) のwebsiteでnavigator.setLoggedInFederated
を呼び出すことで、SPのisLoggedIn
をIdPのアカウントを使ってtrue
にできる。
議論の状況
- 別オリジンとのisLoggedIn状態の共有によるSSO実現の是非。(Support for federated logins, or the ability to transfer IsLoggedIn #35、Potential use of First Party Sets for Single Sign-On #43)
- WebIDとの関係。WebIDを使ったログイン時にisLogggedInをtrueにするか?(Integration with WebID #44)
- ログインに関係する情報(過去にログインしたユーザー名やMFA通過状態など)の永続化をサポートすべきか?(Support "Remember me" functionality #9)