Autodesk Forge 2-legged-authentification接口请求返回资源不存在问题咨询
排查解决步骤
- 校验配置参数合法性
首先确认Viewer_config类下的四个配置值没有被误修改:2-legged认证的grant_type固定为client_credentials,如果该值被篡改会直接触发参数校验失败报错;其次核对client_id、client_secret是否与Autodesk Forge后台的应用配置一致,应用状态为启用、密钥未过期;最后检查scope参数的取值是否符合官方要求,没有拼写错误或未授权的权限项。 - 修正请求体拼接逻辑
你当前手动拼接x-www-form-urlencoded格式请求体的方式存在隐患:如果任意配置值包含&、=、空格等特殊字符未做URL编码,会导致整个请求体格式错乱,服务端解析失败后会返回资源不存在的报错。建议改用PHP内置的http_build_query函数自动处理编码,修改后的代码参考:curl_setopt($ch, CURLOPT_URL, "https://developer.api.autodesk.com/authentication/v1/authenticate"); curl_setopt($ch,CURLOPT_POST,true); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); // 改用数组定义参数,自动做URL编码 $postData = [ 'client_id' => Viewer_config::Viewer_id, 'client_secret' => Viewer_config::Viewer_secret, 'grant_type' => Viewer_config::Viewer_grant, 'scope' => Viewer_config::Viewer_scope ]; curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_HTTPHEADER, array( "Cache-Control: no-cache", "content-type:application/x-www-form-urlencoded" )); - 排查网络链路问题
在部署代码的服务器上直接用curl命令手动发起认证请求,验证是否是本地网络问题导致:
如果手动请求可以正常返回token,说明问题出在代码逻辑;如果手动请求也报同样的错误,需要检查服务器的防火墙、代理规则、DNS解析是否正常,是否有规则拦截或转发了对Autodesk接口的请求。curl -X POST "https://developer.api.autodesk.com/authentication/v1/authenticate" -H "Content-Type: application/x-www-form-urlencoded" -d "client_id=替换为你的client_id&client_secret=替换为你的client_secret&grant_type=client_credentials&scope=data:read" - 确认服务状态
排除以上问题后,可以确认报错时间段是否对应Autodesk官方的服务维护窗口,服务维护期间会出现临时的接口访问异常。
内容的提问来源于stack exchange,提问作者Alexis CAU
相关产品推荐
相关产品推荐

