oidc-clientがサイレント更新で動作するためには、aurelia-appをボディー内に配置する必要があります。
これにより、IFrameをaurelia-appの外に置くことができます。これにより、Aureliaブートストラップが食べるのを防ぎ、oidc-clientをAureliaとは独立して機能させることができます。
あなたのコメントに基づいてEDIT
を、そして私の一部にさわやか少ないメモリ、Iは明らかに/言い直す:
セッションチェッカーとサイレント更新機能は、互いに独立して動作します。セッションチェッカーが手動呼び出しで開始される前に、サイレント更新を行うことができます。サイレント更新を行わずにセッションチェッカーを開始することもできます。一緒に使うのは便利ですが、それだけの関係です。
私はあなたがハイブリッドフローを使用し、OP iframeがcheck_session.html
ページにあり、RP iframeがあなたのaureliaアプリケーションのどこかにあるRPとOP iframeで標準のセッションチェッカーを実装していると仮定します。私のプロジェクトの1つでは、aurelia-app要素の外側にあるindex.html
のRP iframeを持っていますので、aureliaとは独立して動作します。しかし、必ずしもそこにいる必要はないと思います。
あなたは、ハッシュ後session_state
、check_session_iframe
とclient_id
であなたのcheck_session.htmlの場所にRPはiframeのsrc
プロパティを設定するときに、セッションチェッカーが起動します。
check_session.htmlページには、定期的なポーリングを開始することにより、それに対応し、状態が変化した場合には戻ってあなたアウレリアアプリのwindow
にメッセージを投稿します。
あなたのaureliaアプリからは、そのメッセージが聞こえ、signinSilent()
の呼び出しが変更された状態を示していればそれを実行します。 silent_renew.htmlページから、あなたはそれに応答しますsigninSilentCallback()
セッションチェッカーを起動すると、実際に問題はありません。どこかの機能でそれを取り除き、最後にその機能をロードしてください。
、あなたのアプリケーションの起動時に心配する必要は2つのだけのものがある:#code
で始まるwindow.hash
ため
- チェックし、それが、ちょうど
signinSilent()
を呼び出さない場合、それは
- を行う場合
signinRedirectCallback(code)
を呼び出しますすぐに確認してください(チェックする物量を最小限に抑えます)
これらのいずれかの操作が完了したら、getUser()
を実行して確認してくださいnullの場合、またはexpired
プロパティが= trueの場合いずれかの場合は、signinRedirect()
を実行してください。ない場合は、ユーザーが認証されていて、それがことだんオーレリアアプリを聞かせチェッカーなど
をセッションを開始することができ、私は間違いなくはアウレリア - アプリ内のindex.htmlに最初の認証チェックを入れないでしょう。なぜならば、oidcチェックが完了する前にaureliaが読み込みを完了すると、プロセスは失敗します。また、ユーザーオブジェクト(とUserManager)をいくつかのキャッシュ/サービス/他のタイプのシングルトンクラスに保存して、あなたのaureliaアプリケーションから簡単にoidcとやりとりすることもできます。
実際に問題の原因を指摘していただきありがとうございます。私はそれを解決する別の方法があるかもしれないかと思います。サイレント更新の設定を遅らせることが可能かどうかは分かりますか?私はoidc-clientを初期化して、Aureliaを初期化する前にユーザーがログインしているかどうかを知ることができるようにする必要がありますが、早急にリダイレクトすることができますが、チェックセッション機能はすぐには必要ありません。 – Anj
OP iframeとは別の 'check_session.html'を持っていて、あなたのaureliaのメインビューにRP iframeを持ち、' signinSilentCallback() 'で別の' silent_renew.html'を持っていますか? –