/.well-known/change-password
へのリクエストを change-passwords URL にリダイレクトする
/.well-known/change-password
からウェブサイトのパスワード変更ページにリダイレクトを設定します。これにより、パスワード マネージャーはユーザーをそのページに直接誘導できるようになります。
はじめに
ご存じのとおり、パスワードはアカウントを管理する最良の方法ではありません。幸い、WebAuthn などの新技術や、ワンタイム パスワードなどの手法が登場し、パスワードのない世界に近づいています。ただし、これらの技術はまだ開発中であり、急激に変化することはないでしょう。多くのデベロッパーは、少なくとも今後数年間はパスワードを扱う必要があります。新しいテクノロジーと手法が普及するまで、少なくともパスワードの使い勝手を改善することはできます。
そのためには、パスワード マネージャーをより適切にサポートすることが有効です。
パスワード マネージャーの仕組み
パスワード マネージャーは、ブラウザに組み込まれている場合もあれば、サードパーティ製アプリとして提供されている場合もあります。ユーザーをさまざまな方法でサポートできます。
正しい入力フィールドのパスワードを自動入力する: ウェブサイトがこの目的で最適化されていなくても、一部のブラウザはヒューリスティクスによって正しい入力を見つけることができます。ウェブ デベロッパーは、HTML 入力タグにアノテーションを正しく付けることで、パスワード マネージャーをサポートできます。
フィッシングを防止する: パスワード マネージャーはパスワードが記録された場所を記憶するため、パスワードは適切な URL でのみ自動入力され、フィッシング ウェブサイトでは自動入力されません。
安全で一意のパスワードを生成: 安全で一意のパスワードはパスワード マネージャーによって直接生成、保存されるため、ユーザーはパスワードの 1 文字も覚えておく必要はありません。
パスワード マネージャーを使用したパスワードの生成と自動入力は、ウェブですでに広く使用されていますが、パスワードのライフサイクルを考えると、必要に応じてパスワードを更新することは、生成と自動入力と同じくらい重要です。これを適切に活用するために、パスワード マネージャーに次の新機能が追加されます。
脆弱なパスワードを検出して更新を提案する: パスワード マネージャーは、使い回されているパスワードを検出し、エントロピーと脆弱性を分析できます。また、Have I Been Pwned などのソースから、漏洩している可能性のあるパスワードや安全でないことが知られているパスワードを検出することもできます。
パスワード マネージャーは、問題のあるパスワードについてユーザーに警告できますが、ホームページからパスワード変更ページに移動し、パスワードの変更手続き(サイトによって異なります)を行うようユーザーに求めるのは、手間がかかります。パスワード マネージャーがパスワード変更 URL にユーザーを直接誘導できれば、はるかに簡単になります。このような場合、パスワード変更用の既知の URL が役立ちます。
ユーザーをパスワード変更ページにリダイレクトする既知の URL パスを予約しておくことで、ウェブサイトはユーザーをパスワードを変更する適切な場所に簡単にリダイレクトできます。
「パスワード変更用のよく知られた URL」を設定します。
.well-known/change-password
は、パスワード変更用の既知の URL として提案されています。.well-known/change-password
のリクエストをウェブサイトのパスワード変更 URL にリダイレクトするようにサーバーを構成するだけです。
たとえば、ウェブサイトが https://example.com
で、パスワード変更の URL が https://example.com/settings/password
であるとします。https://example.com/.well-known/change-password
のリクエストを https://example.com/settings/password
にリダイレクトするようにサーバーを設定するだけです。以上です。リダイレクトには、HTTP ステータス コード
302 Found
、303 See
Other
、または 307
Temporary Redirect
を使用します。
または、http-equiv="refresh"
を使用して、<meta>
タグを含む .well-known/change-password
URL で HTML を配信することもできます。
<meta http-equiv="refresh" content="0;url=https://example.com/settings/password">
パスワード変更ページの HTML を再確認する
この機能の目的は、ユーザーのパスワードのライフサイクルをよりスムーズにすることを目指しています。ユーザーがスムーズにパスワードを更新できるようにするには、次の 2 つの方法があります。
- パスワード変更フォームに現在のパスワードが必要な場合は、
<input>
タグにautocomplete="current-password"
を追加して、パスワード マネージャーが自動入力できるようにします。 - 新しいパスワード フィールド(多くの場合、ユーザーが新しいパスワードを正しく入力したことを確認する 2 つのフィールド)では、
autocomplete="new-password"
を<input>
タグに追加して、パスワード マネージャーが生成されたパスワードを提案できるようにします。
詳しくは、ログイン フォームのベスト プラクティスをご覧ください。
実際の使用例
例
Apple Safari の実装により、/.well-known/change-password
は、すでに一部の主要なウェブサイトで利用可能になっています。
あなたもきっと自分もやってみてください!
ブラウザの互換性
パスワード変更用の well-known URL は、2019 年から Safari でサポートされています。Chrome のパスワード マネージャーでパスワード マネージャーはバージョン 86 以降(2020 年 10 月下旬に Stable 版リリースを予定)からサポートされ、他の Chromium ベースのブラウザもサポートされる予定です。Firefox に導入する価値はあると考えていますが、2020 年 8 月の時点で導入する予定はありません。
Chrome のパスワード マネージャーの動作
Chrome のパスワード マネージャーが脆弱なパスワードをどのように扱うかを見てみましょう。
Chrome のパスワード マネージャーでは、漏洩したパスワードを確認できます。about://settings/passwords
に移動すると、保存されているパスワードに対してパスワードのチェックを実行し、更新が推奨されるパスワードのリストを表示できます。
更新が推奨されるパスワードの横にある [パスワードを変更] ボタンをクリックすると、ブラウザは次の処理を行います。
/.well-known/change-password
が正しく設定されている場合は、ウェブサイトのパスワード変更ページを開きます。/.well-known/change-password
が設定されておらず、Google がフォールバックを知らないと、ウェブサイトのホームページが開きます。
/.well-known/change-password
が存在しない場合でも、サーバーが 200 OK
を返す場合はどうなりますか?パスワード マネージャーは、ユーザーを実際にこの URL に転送する前に /.well-known/change-password
にリクエストを送信することで、ウェブサイトがパスワード変更用の既知の URL をサポートしているかどうかを判断しようとします。リクエストが 404 Not Found
を返した場合、URL は使用できないことが明らかですが、200 OK
レスポンスが返された場合、URL が使用可能であるとは限りません。次のようなエッジケースがあるためです。
- サーバーサイド レンダリングのウェブサイトでは、コンテンツが存在しない場合、
200 OK
とともに「見つかりません」と表示されます。 - サーバーサイド レンダリングを行うウェブサイトは、「見つかりませんでした」ページにリダイレクトされた後にコンテンツがない場合、
200 OK
を返します。 - シングルページ アプリは、
200 OK
を含むシェルで応答し、コンテンツがない場合、クライアント側で「見つかりません」ページをレンダリングします。
このようなエッジケースでは、ユーザーは「見つかりません」ページに転送され、混乱の原因になります。
そのため、ランダムなページをリクエストして、コンテンツが本当に存在しない場合にサーバーが 404 Not Found
で応答するように構成されているかどうかを判断する標準メカニズムが提案されています。実際には、URL も予約されています(/.well-known/resource-that-should-not-exist-whose-status-code-should-not-be-200
)。たとえば Chrome では、この URL パスを使用して、/.well-known/change-password
から適切なパスワード変更 URL を事前に予測できるかどうかを判断します。
/.well-known/change-password
をデプロイする際は、存在しないコンテンツに対してサーバーが 404 Not Found
を返すことを確認してください。
フィードバック
仕様に関するフィードバックがある場合は、仕様リポジトリに問題を提出してください。
リソース
写真撮影: Matthew Brodeur(Unsplash より)