你好,
我正在尝试在应用程序中实现MSAL.js。基本上,我能够实现msal.js并使用AD中的电子邮件登录。我还配置了msal,以便将tokenid
和accessToken
保存在localStorage
中accessToken
可以在我的后端工作,因为我使用Postman软件测试了它。但在我的应用中,我不知道如何获取它并将其放入我的Axios
标头中,因为localStorage
中的key
显示如下:
在对象的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'
我需要获取访问令牌,以便能够将其放入axios
标头中,如下所示:
axios.defaults.headers.common['Authorization'] = `Bearer ${accessTokenFromMsal}`
先谢谢你。
2条答案
按热度按时间anhgbhbe1#
如果您在项目中使用
msal
包,您可以从MSAL Azure AD的Github Repo访问此samples。看一看line 70上的AuthProvider.js
基本上,你可以在
if(tokenResponse)
语句后面加上一个console.log(tokenResponse)
,如下所示:在你的控制台日志中,你会看到令牌响应的细节,这很棘手,但是你正在寻找的
accessToken
的参数名是idToken.rawIdToken
,而不是accessToken
(因为据我所知,访问令牌是针对ms图的请求令牌)。然后,您可以在这里设置一个项目到您的localStorage。
所以你可以把它放在你的请求头上。就像你的case一样,使用
axios
注意:无论用户何时单击logout方法,都要确保清除
localStorage
中的webApiAccessToken
。希望对你有帮助。
dsf9zpds2#
以下是如何使用
@azure/msal-browser
npm包从本地存储获取访问令牌的示例。所有这些操作的关键是publicClientApplication.getAllAccounts()提供了本地存储中的ID令牌的直接访问权限,以允许您创建长localStorage项密钥。应用程序中应该包含的所有变量。publicClientApplication来自一个您应该拥有的单例变量,然后客户端ID、租户ID和作用域都是OAuth的核心项,您应该已经知道了。
这似乎是直接访问localStorage的唯一方法。我已经深入研究了msal库,访问方法是受保护的,所以尽管这可能会在补丁或小的包更新中中断,但这段代码实际上非常重要。因为msal没有充分利用甚至完全滥用该高速缓存,比如在调用acquireTokenSilent和过度调用openid时给你过时的id令牌-配置,即使该高速缓存中已存在完全有效的令牌。