游客发表
我见过太多开发者卡在这一步。注必注册完百度地图API,须注效复制了一串以“Bearer”开头的服务字符串,兴冲冲地塞进代码里——结果返回401。类型再一看文档,注必人家写的须注效是“服务端应用”,不是服务“Web服务应用”。这俩根本不是类型一回事。
Web服务应用的注必key,本质上是须注效给服务器之间通信用的。你的服务后端要调第三方接口,比如天气、类型支付、注必OCR,须注效那得用这种key。服务它不绑域名,不绑浏览器环境,全靠IP白名单或者签名来验证身份。而普通的前端JavaScript API key,那是给网页里直接调用的,绑死了域名,而且暴露在浏览器里谁都能看见——那种key权限通常也受限,干不了重活。
我同事老周就栽过跟头。他写了个爬虫工具,要用某平台的图像识别接口。图省事,直接从前端项目里复制了个key过来。结果本地跑得好好的,一部署到服务器上就报错。排查了半天,发现那个key绑的是localhost域名。换成Web服务类型的key,填上服务器IP白名单,立马通了。他当时骂了一句:“文档里写了三遍‘必须注册Web服务类型’,我愣是没看见。”
这事不怪他。很多平台的创建页面,默认选中“浏览器端”或者“Android/iOS”,Web服务那个选项缩在角落里,不仔细看真容易漏。而且有些平台管它叫“服务端应用”,有些叫“服务器密钥”,还有叫“API Key (Server)”的——名字不统一,但逻辑一样:这个key只能放在服务器上,不能出现在前端代码里。
怎么确认自己注册对了?看两个地方。第一,创建应用时让你选应用类型,选那个跟“服务端”“Web服务”“服务器”相关的,别选“Web网页”或“JavaScript”。第二,创建完看key的权限列表,一般会有“支持IP白名单”或者“可设置域名白名单”的选项——如果只有域名白名单,那多半是给前端用的。另外,有些平台会直接显示“此key仅限服务端使用”,那就更明确了。
还有个坑。有些平台允许你创建多个key,但同一账号下不同应用类型的key是分开的。你之前注册过前端key,再注册一个Web服务key,得重新建应用,不能直接在旧key上改类型。改类型?不存在的,只能删了重建。所以注册前先想清楚:我这个功能是纯后端调用,还是混合了前端直连?如果是纯后端,闭着眼睛选Web服务。
最后说个我自己摸索出来的土办法。注册完先别急着写业务代码,拿curl测一下。比如你调的是某个API,直接命令行里把key放进去,带个测试参数,看返回结果。如果提示“key无效”或者“权限不足”,先检查类型选没选对。这一步三十秒的事,能省你一下午的调试时间。
说到底,这问题就是个“认真读选项”的事。但人嘛,总爱凭经验跳过细节。我写出来,是因为我自己也跳过,然后被教育了。希望你不用再被教育一次。
友情链接