Logto 連携アプリにサインインするときに 404 が表示される理由
Logto 連携アプリにサインインしようとしたときに「404 Not Found」エラーに遭遇したことはありますか?このブログ投稿では、なぜこれが起こるのか、そしてどうすればそれを回避できるのかを説明します。
背景
Logto を使用した認証アプリにサインインしようとして「404 not found」エラーに遭遇したことはありますか?エンドユーザーから同じ問題が報告されたことはありますか?
これは、アプリケーションから意図されたサインインフローを経ずにサインインページ(例: https://your-app.com/sign-in
)に直接アクセスした場合に発生することがあります。
理由は以下のとおりです:
OIDC フローの重要性
Logto は安全な認証のために OpenID Connect (OIDC) プロトコル に依存しています。通常のアプリケーションフローを通じてサインインすると(例: 通常、アプリケーションからサインインボタンをクリックすることで)、アプリケーションは Logto の OIDC サーバーとの通信を開始します。この通信は「認可リクエスト」と呼ばれ、最初に発信者に対する様々な検証を行い、その後、ブラウザとサーバーの間にクッキーで管理された安全なセッションを確立します。
ユーザーが「/sign-in」ページに直接移動すると問題が発生します。これは、OIDC 認可リクエストをトリガーするアプリケーションの内部ロジックを省略するためです。その結果 、サーバーはブラウザを有効なセッションを持つものとして認識しなくなり、404 エラーが発生します。
解決策
この問題を回避するには、主に 2 つの方法があります:
常にアプリのサインインボタンを使用する
"/sign-in" ページに直接アクセスするのではなく、アプリケーションが提供する意図されたログインフローに従ってください。アプリ内の「サインイン」ボタンをクリックすると、正しい OIDC 認可リクエストが開始され、必要なセッションが確立されます。
ユーザーを自動的にリダイレクトする
Logto インスタンスに 1 つのアプリケーションしかない場合、有効なセッションなしに「/sign-in」ページへのユーザーアクセスを自動的にインターセプトし、サインインボタンが表示されたメインページにリダイレクトするロジックを実装することを検討できます。Logto の「Omni-sign-in」の性質により、複数のアプリケーションが同じ認証システムを共有できるため、そのようなページリクエストが来たときに Logto はどのアプリにリダイレクトすべきかを知ることができませんが、これは Logto によって行うことはできません。
経験改善に関する追加の考え
少なくとも「/unknown-session」ページに役立つメッセージを追加し、404 の理由を説明してユーザーに正しい手順を知らせることでユーザーエクスペリエンスを改善しようとしています。
同じ Logto インスタンスのために検出されたアプリケーションが 1 つだけの場合、セッションが無効なときは「サインアウト リダイレクト URI」(通常はアプリケーションのメインページ)に自動的にリダイレクトしたり、そのような場合にはカスタマイズメッセージを表示する追加の設定を追加するなど、問題を軽減するための他の安全な措置を検討するかもしれません。
結論
「/sign-in」ページでの 404 not found(無効なセッション)エラーは、認可リクエストをトリガーする通常のアプリケーションサインイン フローをバイパスするサインインページ URL に直接アクセスすることで引き起こされ、したがって有効なセッション(クッキーで管理される)が確立されないことが原因です。
このフローとその重要性を理解することで、エラーを回避し、Logto 連携アプリでシームレスなサインイン エクスペリエンスを楽しむことができます。
ご意見を共有されたい場合は、遠慮なくお問い合わせください。