近期在维护一个地图微服务,需要给 api 接口加上鉴权,调用方有前端浏览器,安卓端和其他微服务。
参考了一下业内的鉴权方式,如天地图,百度地图和高德地图。这几家的鉴权方式都是大同小异,对于调用方需要区分是浏览器应用还是服务端应用,若是浏览器就采用 ak+域名白名单的方式鉴权,若是服务端就采用 ak+sk 加签的方式鉴权。
我也想采用这个思路,但是有两个疑问:
1.我服务内的同一个接口如何区分过来的请求是来自服务端或者是浏览器呢,这里做判断之后要用上述两种不同的方式去鉴权。
2.若一个无权限的服务端应用获取了其他浏览器应用的 ak ,自己加上 referer 和 user-agent 等 header ,伪装成浏览器应用请求接口,貌似这种鉴权方案就无法应对了。(因为我在浏览器拿到申请了天地图服务的 ak ,在本地用 postman 就可以轻易得加上上述的 header 头,成功请求到天地图的地图瓦片)