javascript - 获取MSAL.JS生成的localStorage中的访问 token 并将其放入axios中

标签 javascript reactjs axios msal.js

美好的一天,

我正在尝试在我的应用程序中实现 MSAL.js。基本上,我能够实现 msal.js 并使用 AD 中的电子邮件登录。我还配置了 msal 以将我的 tokenidaccessToken 保存在我的 localStorage

accessToken 正在我的后端工作,因为我使用 Postman 软件对其进行了测试。但在我的应用程序中,我不知道如何获取并将其放入我的 Axios header 中,因为 localStorage 中的 key 显示如下:

enter image description here

它在对象的 localStorage 中有一个Key

{"authority":"https://login.microsoftonline.com/TENANTID/","clientId":"CLIENT_ID","scopes":"CLIENT_ID","homeAccountIdentifier":"SOME_HASH"}

值为:

accessToken: 'TOKEN_HASH_HERE'
idToken: 'TOKEN_HASH_HERE'
expiresIn: 'TOKEN_HASH_HERE'
homeAccountIdentifier: 'TOKEN_HASH_HERE'

我需要获取访问 token 才能将其放入我的 axios header 中,如下所示:

axios.defaults.headers.common['Authorization'] = `Bearer ${accessTokenFromMsal}`

提前谢谢您。

最佳答案

如果您在项目中使用 msal 包,您可以访问此 samples来自 MSAL Azure AD 的 Github 存储库。

看看 line 70 上的这个 AuthProvider.js

enter image description here 基本上,您可以在 if(tokenResponse) 语句之后放置 console.log(tokenResponse) 。像这样:

if(tokenResponse){
    console.log(tokenResponse)
}

在控制台日志中,您将看到 token 响应的详细信息。这很棘手,但您正在查找的 accessToken 的参数名称是 idToken.rawIdToken 而不是 accessToken (因为据我所知,访问 token 用于向 ms 图发送请求 token )。

然后您可以在本地存储中设置一个项目。

if (tokenResponse) {
localStorage.setItem("webApiAccessToken", tokenResponse.idToken.rawIdToken)
...
}

因此您可以将其放在请求 header 中。就像您的情况一样,使用 axios

axios.defaults.headers.common['Authorization'] = `Bearer ${localStorage.getItem('webApiAccessToken')}`

注意:每当用户单击注销方法时,请务必清除 localStorage 中的 webApiAccessToken。为此,只需 localStorage.removeItem("webApiAccessToken")

希望对你有帮助。

关于javascript - 获取MSAL.JS生成的localStorage中的访问 token 并将其放入axios中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60944169/

相关文章:

javascript - Bootstrap 导航菜单不会折叠

reactjs - 他们说 React 受 XSS 保护是什么意思?

vue.js - Vue - 使用 Axios 填充表

javascript - 在href中调用auth0登录

javascript - 如何更改数据表中的行颜色?

javascript - 如何在未安装的组件上修复 'index.js:1446 Warning: Can' t 调用 setState(或 forceUpdate)...“在 ReactJS 中

javascript - NextJs 中的 axios 响应中的类型 'never' .ts(2339) 上不存在属性

javascript - Axios promise 不会在 vue 方法中抛出错误

javascript - slider 在浏览器中显示为框,但在 Fiddle 中工作正常(控制台中无错误显示)

ReactJS - 使用 ChartJS-2 标记多维数组