在我的React应用中,我使用OAuth 2.0授权代码授予进行身份验证,并使用Graph APi发出大多数请求(我在Azure AD中注册了一个应用)。它们与我使用MSAL2提供程序(工具包)接收的访问令牌完美配合。
Providers.globalProvider = new Msal2Provider({
clientId: config.clientId,
authority: config.authority,
redirectUri: config.redirectUri,
scopes: [
"openid",
"profile",
"Calendars.ReadWrite",
"Place.ReadWrite",
"Place.ReadWrite.All",
"User.Read",
"People.Read",
],
});
我用以下函数获取访问令牌:
const getAccessToken = async () => {
let token;
if (Providers.globalProvider.state === ProviderState.SignedIn) {
token = await Providers.globalProvider.getAccessToken();
token = `Bearer ${token}`;
}
return token;
};
最近,我得到了另一个服务,但不是直接到图形API,而是由我们的后端谁后,一些验证作出查询图形API(确切地说,它是一个房间更新调用
https://graph.microsoft.com/v1.0/places/${roomId}
我的服务:
const updateRoom=async (roomId:string|undefined, room:Room):Promise<void>=> {
return axios.put(`http://localhost:3000/api/v1/rooms/${roomId}`, {capacity:Number(room.capacity),equipments:room.tags},{
headers: {
Authorization: await getAccessToken(),
},
})
但我从服务器得到的是状态500,AxiosError:请求失败,状态代码为500\n。
当在Swagger中测试我们的后端应用程序时-〉它工作正常,房间更新正确。我曾尝试从Swagger中复制令牌并在我的React应用程序中使用相同的令牌--〉也工作正常,但我无法将从MSAL2接收的访问令牌用于此目的。为什么会发生这种情况?在哪里可以找到前端或后端的解决方案?
1条答案
按热度按时间hkmswyz61#
你是否使用相同的帐户来测试Swagger和React应用程序中的请求?正如文档所说,只有“工作或学校帐户”支持地点更新。这会是一个问题吗?