パスワード変更用のよく知られた 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 月下旬に安定版がリリースされる予定)からこの機能をサポートし始め、他の 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