ディープリンクを含む電子メールを送信するアプリケーションがあり、OAuth2が使用されています。ディープリンクは、ユーザーがすでにログインしている(有効なアクセストークンを持っている)ときにはうまく動作しますが、トークンが古くなったときには破損していません。その理由は、アプリケーションが特定の深いURL認証サーバーに、自分自身へのリダイレクトURLでリクエストを発行します(元のリクエストのディープリンクではなくメインページです。つまり、アプリケーション用に設定したリダイレクトURLです)。ログインがうまくいくと認証サーバーはリダイレクトを実行し、アプリケーションはメインページを表示し、元のディープリンク要求は忘れてしまいます。このことはすべて、単一のブラウザのウィンドウ/タブ(他のタブを開くことも、ポップアップを使用しないことも要求されます)で発生することが重要です。リダイレクトのためOAuth2とのディープリンクが失われました
認証サーバーがリダイレクトで逐語的に使用する必要がある「状態」要求パラメータを(濫用して)使用する考えがありました。アプリケーションに(アプリケーション内のリンクのような)情報が含まれていました。目的のページを表示します。私は、このような「状態」パラメータがこのように使用されるはずかどうかはわかりませんが、このようなカスタムロジックではなくCSRF防止のために設計されているようです。
もう1つのオプションは、サーバがフルリダイレクトURLと設定されたリダイレクトURLを一致させないことに基づいています。設定されている接頭辞がプレフィックスされているかどうかを確認するだけです(OAuth2仕様では、それは完全一致が行われるべきだと言います)。したがって、リダイレクトURLがディープリンクであり、設定されたURLがプレフィックスであるため、動作します。しかし、サーバーが完全なURLと一致すると判断した場合、この動作は壊れます(そして、Spring Securityで書かれており、この動作を変更するのはかなり簡単です。既にlib:https://github.com/spring-projects/spring-security-oauth/blob/ec215f79f4f73f8bb5d4b8a3ff9abe15b3335866/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/provider/endpoint/ExactMatchRedirectResolver.javaで提供されている別のmatcherクラスを使用します)。 OAuth2と戦わない方法で、より安全なものを使用したいと思います。
これを行うより良い方法はありますか? 「状態」パラメータの