問題タブ [oidc-client-js]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1909 参照

reactjs - 反応中の onelogin OIDC トークンの更新

oidc-clientライブラリを使用してトークンの更新を実装することにほとんど成功していません。どんな助けや洞察も大歓迎です。

スタック:

  • 反応する
  • GraphQL (アポロ クライアント)

構造:

フォルダーにコールバック ファイルautomaticSilentRenewを作成することから始めて、いくつかのアプローチを試しましたが、この両方のアプローチでエラーが発生したため、回避策に着手しました。static-renew.htmlpublic/No state in response

回避策:

次のことを行うコンポーネントでルーターをラップしています。

  • マウント時oidc-client.getUser()に次のリスナーを呼び出して追加します。

    • oidcMgr.events.addAccessTokenExpiring(handleTokenExpiring)
    • window.addEventListener('message', this.handleSilentRenew)
  • イベントが最初に発生すると、addAccessTokenExpiring次の関数が呼び出されます oidcMgr.createSigninRequest({ redirect_uri: process.env.REACT_APP_SILENT_REDIRECT_URI }) apollo-link-state

  • (上記の関数から) apollo-link-state に tokenURI がある場合、iFrame をレンダリングします。

  • コンポーネントがアンマウントされると、両方のリスナーが削除されます。

  • コールバック URL がヒットすると、ソースとともにメッセージを投稿するコンポーネントがマウントsilent-renewされるため、手順 1 でマウントされたリスナーはトークン URI を''に設定してapollo-link-state、iframe を終了し、getUser再度呼び出します。

これはトークンを更新するために機能しますが、iFrame がアプリケーション全体をその内部にロードしてから終了し、アプリケーションが必要以上のリソースを消費しているようです。

このライブラリを使用して React アプリケーション内でトークンを更新する別のより簡単な方法はありますか? どんな助けや視点も大歓迎です。ありがとうございました!