'Invalid audience' 来自 Angular 应用中的 Strapi Microsoft 提供商回调请求
'Invalid audience' from Strapi Microsoft provider callback request in Angular app
我正在尝试在 Angular 应用程序中使用 Microsoft 配置身份验证。我能够在应用程序中成功进行身份验证。当我将收到的令牌发送到 http://localhost:1337/auth/microsoft/callback?access_token=${token}
时,我收到回复说 'Access token validation failure. Invalid audience.' 我检查了我在 jwt.io 中发送的令牌并且观众与 Str[= 中配置的客户端 ID 相匹配54=] Microsoft 提供商的管理员配置。我错过了一步吗?
我的请求看起来像这样,并在身份验证完成并设置令牌后被触发。
let token = window.localStorage.getItem('msal.idtoken') this.http.get(http://localhost:1337/auth/microsoft/callback?access_token=${token}`) .subscribe((res) => { console.log(res); });
编辑:
令牌已解码:
Azure 应用注册:
结构api 配置:
编辑:
没有意识到访问令牌与 idToken 是分开的。在浏览网络选项卡后,我找到了实际的并在下面发布。将此 api 调用到 Strapi 会返回一个有效令牌。所以它似乎在工作。但我不知道如何在前端以编程方式检索此令牌,因为它被称为重定向 URI。是否有一种通用的策略可以在它消失之前从 url 中捕获它以保存在存储中?
访问令牌:
权限:
在你的代码中,我发现你得到了 id 令牌并用它来访问你的 api,正如你提到的,它会引发 'Access token fail. Invalid audience.' error.You should use an access访问您的 api.
的令牌
关于你的问题,你想以编程方式获取访问令牌吗?如果是,你可以参考this。
代码通常是这样的:
getToken() {
const accessTokenRequest = {
scopes: [
"your api url",
],
clientId: "xxxxxxxxxxxxxxxx",
authority: "https://login.microsoftonline.com/(tenant)ID or tenant name",
redirectUri: "http://localhost:4200",
};
this.authService
.acquireTokenSilent(accessTokenRequest)
.then((res) => {
console.log("acquireTokenPopup");
this.token = res.accessToken;
this.getUser();
})
.catch((e) => {
console.log("acquireTokenPopup catch");
console.log(e);
});
}
如果您只想存储访问令牌:
要在您使用的本地存储中保存字符串
window.localStorage.setItem(key, value);
您稍后可以通过以下方式获取该值:
window.localStorage.getItem(key);
window.localStorage.setItem('access_token',令牌);
window.localStorage.getItem('access_token');
希望对你有帮助。
我正在尝试在 Angular 应用程序中使用 Microsoft 配置身份验证。我能够在应用程序中成功进行身份验证。当我将收到的令牌发送到 http://localhost:1337/auth/microsoft/callback?access_token=${token}
时,我收到回复说 'Access token validation failure. Invalid audience.' 我检查了我在 jwt.io 中发送的令牌并且观众与 Str[= 中配置的客户端 ID 相匹配54=] Microsoft 提供商的管理员配置。我错过了一步吗?
我的请求看起来像这样,并在身份验证完成并设置令牌后被触发。
let token = window.localStorage.getItem('msal.idtoken') this.http.get(http://localhost:1337/auth/microsoft/callback?access_token=${token}`) .subscribe((res) => { console.log(res); });
编辑:
令牌已解码:
Azure 应用注册:
结构api 配置:
编辑:
没有意识到访问令牌与 idToken 是分开的。在浏览网络选项卡后,我找到了实际的并在下面发布。将此 api 调用到 Strapi 会返回一个有效令牌。所以它似乎在工作。但我不知道如何在前端以编程方式检索此令牌,因为它被称为重定向 URI。是否有一种通用的策略可以在它消失之前从 url 中捕获它以保存在存储中?
访问令牌:
权限:
在你的代码中,我发现你得到了 id 令牌并用它来访问你的 api,正如你提到的,它会引发 'Access token fail. Invalid audience.' error.You should use an access访问您的 api.
的令牌关于你的问题,你想以编程方式获取访问令牌吗?如果是,你可以参考this。
代码通常是这样的:
getToken() {
const accessTokenRequest = {
scopes: [
"your api url",
],
clientId: "xxxxxxxxxxxxxxxx",
authority: "https://login.microsoftonline.com/(tenant)ID or tenant name",
redirectUri: "http://localhost:4200",
};
this.authService
.acquireTokenSilent(accessTokenRequest)
.then((res) => {
console.log("acquireTokenPopup");
this.token = res.accessToken;
this.getUser();
})
.catch((e) => {
console.log("acquireTokenPopup catch");
console.log(e);
});
}
如果您只想存储访问令牌:
要在您使用的本地存储中保存字符串
window.localStorage.setItem(key, value);
您稍后可以通过以下方式获取该值:
window.localStorage.getItem(key);
window.localStorage.setItem('access_token',令牌); window.localStorage.getItem('access_token');
希望对你有帮助。