AD auth:idToken过期后如何重置?

问题描述 投票:0回答:1

我正在使用 ReactJs。我正在使用 IdToken 进行后端 api 身份验证。我将其保存在本地存储中,并且对于每个请求,我都会将其发送到后端。

然而,一小时后令牌就会过期,后端 API 调用开始失败。

我想通过重新加载页面或静默刷新它。我怎样才能做到这一点?

这是我的代码: 这是app.tsx

import { createBrowserRouter } from 'react-router-dom';

import App from 'App';

import { PublicClientApplication, EventType, EventMessage, AuthenticationResult } from '@azure/msal-browser';

import { msalConfig } from 'auth/authConfig';

export const msalInstance = new PublicClientApplication(msalConfig);

const accounts = msalInstance.getAllAccounts();

if (accounts.length > 0) {

    const [{ idToken }] = accounts;

    localStorage.setItem('authStatus', idToken);

    msalInstance.setActiveAccount(accounts[0]);

}

msalInstance.addEventCallback((event: EventMessage) => {

    if (event.eventType === EventType.LOGIN_SUCCESS && event.payload) {

        const payload = event.payload as AuthenticationResult;

        const account = payload.account;

        const { idToken } = account;

        localStorage.setItem('authStatus', idToken);

        msalInstance.setActiveAccount(account);

    }

});

export const router = createBrowserRouter([

    {

        path: '/',

        element: <App pca={msalInstance} />,

    },

]);
reactjs azure authentication azure-active-directory
1个回答
0
投票

我总是建议像 Idris 一样使用 aquireTokenSilent,msal 库检查当前令牌是否有效(如果无效,它会自动从 Microsoft 检索新令牌)并从您选择的存储中返回它。

如果令牌过期,则可能会失败(例如,在我的情况下,刷新令牌将在 24 小时后过期)

   msalInstance.acquireTokenSilent(tokenRequest)
   .then(response => {
       //use response.accessToken and do your api calls
   })
   .catch(error => {

// 如果刷新令牌过期则失败,因此需要新的登录 if (InteractionRequiredAuthError 错误实例) { msalInstance.acquireTokenPopup(tokenRequest).then(response => {

       });
    }
  });
© www.soinside.com 2019 - 2024. All rights reserved.