如何在Partner Card内获取Three-Legged Authentication?解决嵌入认证报错
解决APS Partner Card中Three-Legged认证的X-Frame-Options报错问题
这个报错的核心原因是Autodesk认证服务页面明确设置了X-Frame-Options: deny,禁止在任何iframe中加载,而Partner Card本身运行在BIM360/ACC页面的iframe环境里,直接重定向到认证页面会触发浏览器安全限制。
解决方法如下:
使用独立弹出窗口承载认证流程
不要在Partner Card的iframe内直接跳转认证页面,而是通过window.open()打开独立浏览器窗口加载认证地址,示例代码:// 构造完整的认证URL(替换为你的应用参数) const authUrl = 'https://auth.autodesk.com/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_CALLBACK_URL&response_type=code&scope=data:read'; // 打开指定尺寸的弹出窗口 window.open(authUrl, 'AutodeskAuth', 'width=600,height=800,top=100,left=100');实现认证回调与父窗口通信
认证完成后,回调页面需将结果传递回Partner Card所在的父窗口,再关闭弹出窗口:- 回调页面处理代码:
// 从URL参数中提取授权码 const urlParams = new URLSearchParams(window.location.search); const code = urlParams.get('code'); // 向父窗口发送认证完成消息(生产环境建议指定具体域名) window.opener.postMessage({ type: 'AUTH_COMPLETE', authorizationCode: code }, '*'); // 关闭弹出窗口 window.close();- Partner Card页面监听消息事件:
window.addEventListener('message', (event) => { // 验证消息来源(可选但推荐) if (event.origin !== 'YOUR_CALLBACK_DOMAIN') return; if (event.data.type === 'AUTH_COMPLETE') { const code = event.data.authorizationCode; // 用授权码换取访问令牌,继续后续业务逻辑 console.log('Received authorization code:', code); } });配置合法的回调URL
在APS开发者控制台的应用设置中,确保弹出窗口的回调URL已添加到「允许的回调URL」列表,否则认证服务会拒绝回调请求。
内容的提问来源于stack exchange,提问作者Guy Hareuveni
相关产品推荐
相关产品推荐

