next.js 仅允许“单页应用程序”客户端类型进行跨来源令牌兑换

brccelvz  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(131)

我尝试在nextjs应用程序中从ms graph api获取访问令牌。它在postman中运行良好,但当我在应用程序中执行此操作时,我得到“AADSTS9002326:跨源令牌兑换只允许“单页应用程序”客户端类型。”我甚至以前也用过同样的方法,但在Azure函数中,这很有效。
下面是nextjs应用程序的代码

var url = `https://login.microsoftonline.com/${tenantId}/oauth2/v2.0/token`;

const { post, data, error, loading } = useFetch<any>(url);
const requestParams = new FormData();
requestParams.append('grant_type', 'client_credentials');
requestParams.append('client_id', clientId);
requestParams.append('client_secret', clientSecret);
requestParams.append('scope', 'https://graph.microsoft.com/.default');
useEffect(() => {
  const timeoutId = setTimeout(() => void post(requestParams), 200);
  return () => clearTimeout(timeoutId);
}, []);

const accessToken = data?.access_Token || "key not found";

return { post, data, accessToken, error, loading };

我都尝试过将Azure中的身份验证设置为SPA和Web,但仍然没有成功。
我真的可以使用一些技巧,当在一个nextjs应用程序这样做。

dnph8jn4

dnph8jn41#

当请求中缺少“Origin”标头时会发生此错误,请查看git上的评论,类似问题-https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/2482#issuecomment-717576089
尝试添加标题:
来源:http://localhost
我希望这能有所帮助
谢谢

相关问题