1

認証フローをいじっていて、Web サーバーを再起動すると URL が機能しなくなり、それらがすべて無効になっていることに気付きました。デバッグについて説明しましたが、正確な理由についてはまだ少し迷っていますが、それが発生する理由はたくさんあります (そして、あなたもそうだと確信しています)。

複数のコンテナーに分散されるサービスを作成したいのですが、要求が届いたときにそれらのいずれかがそれを提供できます。解決策は現在のところ、可能にするために変更を加える必要があるようです。

URL を無効にしているのは正確には何ですか? また、提案したソリューションを実現するためにどのような変更を加えることができますか?

前もって感謝します。


オハードのコメントに応えて:

1. URL が無効な理由

エラーが発生する方法を教えてください。戦争を展開し、忘れたパスワードを送信します。メールを受け取ってパスワードをリセットし、戦争を止めてください。それが発生すると、パスワードのリセット ページで enc が抽出されます。次に、戦争を停止して再展開します。/rest/setNewPassword マッピングへの enc と新しいパスワードを含む REST 要求を送信した後、次を受け取ります。

2016 年 1 月 9 日 03:50:48,799 [http-nio-8082-exec-1] エラー web.rest.UserActionRestController - URL コンテンツ aX8uaOWkqAUQN2xOzlPAOHJjPZaxBwho7.yoMeUtMnJA の復号化に失敗しました

ohadr \crypto\service\CryptoService.javaの 261 行目に例外があります。

throw new CryptoException("URL コンテンツの復号化に失敗しました" + based64EncryptedContent, e);

次に、ブレークポイントを使用して次を見つけます。

java aes javax.crypto.BadPaddingException: 指定された最終ブロックが適切にパディングされていない

この問題を再現しようとすると、同じ結果が得られると確信しています...

注: 再デプロイせずにこれを行うと、すべてがうまく機能します!

2. auth-flows を SaaS として機能させる方法

このサービスで満たしてほしい 3 つのユース ケースがあります。

  1. 現在、私がサービスをホストしていて、それがフェイルオーバーせずにダウンした場合、URL を持っている人は、サービスが復旧したときにリンクを使用できなくなります。関係なくリンクを使用できるようにしてほしい。

  2. (テストされていませんが、すぐに実行されます) 2 番目と同様に、このサービスを複数の Docker コンテナーでホストする場合、元はそのコンテナーから取得されたものではないリンクを受け取ることができないため、コンテナーは並べ替えられていない負荷を共有できませんでした。 . enc のいずれかを読み取って処理できる必要があります。


編集:

1. URL が無効な理由

これをテストするさらに簡単な方法は、忘れたパスワードを送信し、電子メールを取得して戦争を停止することです。再デプロイしてから、リンクをクリックします。私はこのスタックトレースを得ました:

https://drive.google.com/file/d/0Bwa-JXbjFUDueXVMWWJibjY2Zm8/view?usp=sharing

csrf が有効になっていないことを心配する必要はありません。

4

2 に答える 2

0

@EdiZは正しいです。

より正確に言うと、Web アプリがロードされるたびに、Spring はすべての Bean をロードします。その中には、 CryptoUtilCryptoProviderなどの Crypto のライブラリ Bean があり、よく見ると DefaultCryptoProvider.loadMasterKeys() で新しいキーが生成されていることがわかります。

それがあなたが見ている行動を説明していると思います。

現在、私がサービスをホストしていて、それがフェイルオーバーせずにダウンした場合、URL を持っている人は、サービスが復旧したときにリンクを使用できなくなります。関係なくリンクを使用できるようにしてほしい

最初の質問と重複しているようです。あなたが望むように機能させるには、最初の問題を解決する必要があると思います。サーバーが再起動すると、すべてのリンクが無効になります。ユーザーは (たとえば) [パスワードを忘れる] をもう一度クリックして、新しいリンクを取得する必要があります。この契約の規模を決定するのはあなたです。

このサービスをホストしていてフェイルオーバーがある場合、フェイルオーバーは元の URL 以外の URL を読み取ることができないと想定します。enc のいずれかを読み取って処理できる必要があります。

サーバーがそれによって生成されなかったURLを解読できるように、もう少し永続性を開発する必要があると思います...

それが役立つことを願っています。

于 2016-01-09T19:00:04.883 に答える