パスワード変更用のよく知られた URL を追加することで、ユーザーが簡単にパスワードを変更できるようにします

/.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 Found303 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 に移動すると、保存されているパスワードに対してパスワードのチェックを実行し、更新が推奨されるパスワードのリストを表示できます。

Chrome のパスワードの確認機能

更新が推奨されるパスワードの横にある [パスワードを変更] ボタンをクリックすると、ブラウザは次の処理を行います。

  • /.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 BrodeurUnsplash より)