Autodesk Forge Viewer加载ACC文件报401错误排查求助
Forge Viewer加载ACC文件时401授权错误的排查与解决
可能的原因
- URN误用:你从
item.versions[].relationships.derivatives.data.id拿到的ID不是Viewer可直接识别的文档URN。这个字段是衍生品资源的ID,正确的做法是使用版本自身的ID(item.versions[].id),做URL安全的Base64编码(去掉末尾的=),再加上urn:前缀作为Viewer的documentId。 - 令牌权限未覆盖目标资源:即便令牌有
viewables:read和data:read,也要确认OAuth应用已被授权访问该ACC文件所在的项目。ACC资源是项目级权限控制,应用没拿到对应项目的授权,令牌就会被拒。 - 衍生品未生成完成:如果ACC里的文件还在生成衍生品(比如刚上传的模型还在处理),Viewer请求时会返回401,本质是资源不存在但被包装成授权错误。
初始化/令牌传递的问题
你的代码直接传accessToken的方式本身没问题,但有两个优化点:
- 缺少令牌刷新逻辑:如果后续令牌过期,Viewer无法自动获取新令牌,建议改用
getAccessToken回调:
const options = { api: 'derivativeV2', env: 'AutodeskProduction', getAccessToken: (onTokenReady) => { // 这里可以调用你的令牌刷新接口,返回最新令牌和过期时间 onTokenReady(publicToken, Math.floor(Date.now() / 1000) + 3600); // 假设1小时有效期 } };
- 令牌上下文不匹配:确保令牌是通过目标ACC项目的授权流程获取的,全局授权的令牌可能没有访问特定项目资源的权限。
额外检查项
- 验证衍生品状态:调用Data Management API的
GET /versions/:version-id/relationships/derivatives,确认衍生品的状态是success,且拿到正确的衍生品URN(不是data.id字段)。 - 校验令牌有效性:调用
GET https://developer.api.autodesk.com/authentication/v1/validate接口,确认令牌的scope包含viewables:read和data:read,且aud字段匹配ACC的API端点。 - 检查CORS配置:在Autodesk开发者控制台确认你的网站域名已添加到CORS允许列表,否则可能导致令牌无法正确传递到API。
- URN格式验证:确保Base64编码后的URN没有特殊字符,且前缀是
urn:,比如正确格式是urn:base64_encoded_version_id。
内容的提问来源于stack exchange,提问作者isoiso
相关产品推荐
相关产品推荐

