簡単な作業のように思える問題を解決する方法について2日間頭を悩ませてきましたが、それは私を夢中にさせ始めています。
ユーザーが認証にSAML 2.0を使用するアプリケーションがあります。フロントエンド用に反応アプリケーションをセットアップしており、JWTを使用してフロントエンドとバックエンド間のrest-api通信を保護するつもりであると考えていました。
ユーザーがサインインするときのフローは次のとおりです。
次に何をすればいいですか?問題は、ユーザーがIDプロバイダーからコールバックすると、react-applicationにいないため、アプリケーションのすべての状態が失われるため、応答したものはすべてブラウザーに送信されることです。
IdentityproviderがコールバックするSamlResponseをブラウザーに強制する方法はありますか?次に、react-applicationからのhttp-requestとしてサーバーに送信します。
いくつか考えた後、次の解決策が思い付きました。
SAMLにはRelayState
という名前があり、これはサービスプロバイダーが応答する必要があるプロパティです。したがって、プロセスは次のようになります。
http://frontendserver.com
にアクセスし、Reactアプリケーション(サインインしていない))で静的ページをサーバーに取得します。http://backendserver.com/login/?RelayState=http://frontendserver.com
にリダイレクトされ、passport-samlを介して認証され、ユーザーがSPにリダイレクトされます。したがって、RelayStateでリクエストのオリジンを渡します。RelayState/#token
にリダイレクトします。これは明白な方法のように思われたかもしれませんが、これが機能することを理解するのにかなり時間がかかりました。
私はこの質問がNodeバックエンド用であることを知っていますが、PHP/Apache Webサーバーバックエンドの実装の記事を見つけました ここ 、それは誰かがこの種のことがどのように機能するかのプロセスの流れを理解する。