2016-09-28 5 views
0

これは実際にIdentity Serverまたはoidc-clientには問題はないかもしれませんが、問題を解決するのに問題があります。私はこれをAureliaアプリケーションのSystem.jsで実行しているため、これらの外部ライブラリのいずれかから問題が発生する可能性があります。 CheckSessionIFrame.start(session_state)oidc-client CheckSessionIFrameが正常に1回起動してから、それ以降に失敗します

、我々は次のコードを持っている:

this._timer = window.setInterval(() => { 
    this._frame.contentWindow.postMessage(this._client_id + " " + this._session_state, this._frame_origin); 
}, this._interval); 

最初の時間間隔火災を、何も問題はないように思われます。 iFrameのcontentWindowが(期待通りに)存在し、postMessageメソッドが問題なく呼び出されます。 2秒後、インターバルが再び発生すると、this._frame.contentWindowは未定義です。だから、私の最高の推測は、iFrameがどうにか死んでいるということです。繰り返しますが、これはoidc-clientの問題ではないかもしれませんが、何が原因でこのiFrameが(おそらく内部的にはスクリプトで死んでいるのかもしれませんか? oidc-client。

答えて

1

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_statecheck_session_iframeclient_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とやりとりすることもできます。

+0

実際に問題の原因を指摘していただきありがとうございます。私はそれを解決する別の方法があるかもしれないかと思います。サイレント更新の設定を遅らせることが可能かどうかは分かりますか?私はoidc-clientを初期化して、Aureliaを初期化する前にユーザーがログインしているかどうかを知ることができるようにする必要がありますが、早急にリダイレクトすることができますが、チェックセッション機能はすぐには必要ありません。 – Anj

+0

OP iframeとは別の 'check_session.html'を持っていて、あなたのaureliaのメインビューにRP iframeを持ち、' ​​signinSilentCallback() 'で別の' silent_renew.html'を持っていますか? –

関連する問題