0

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 アプリケーション内でトークンを更新する別のより簡単な方法はありますか? どんな助けや視点も大歓迎です。ありがとうございました!

4

2 に答える 2