近期在维护一个地图微服务,需要给 api 接口加上鉴权,调用方有前端浏览器,安卓端和其他微服务。
参考了一下业内的鉴权方式,如天地图,百度地图和高德地图。这几家的鉴权方式都是大同小异,对于调用方需要区分是浏览器应用还是服务端应用,若是浏览器就采用 ak+域名白名单的方式鉴权,若是服务端就采用 ak+sk 加签的方式鉴权。
我也想采用这个思路,但是有两个疑问:
1.我服务内的同一个接口如何区分过来的请求是来自服务端或者是浏览器呢,这里做判断之后要用上述两种不同的方式去鉴权。
2.若一个无权限的服务端应用获取了其他浏览器应用的 ak ,自己加上 referer 和 user-agent 等 header ,伪装成浏览器应用请求接口,貌似这种鉴权方案就无法应对了。(因为我在浏览器拿到申请了天地图服务的 ak ,在本地用 postman 就可以轻易得加上上述的 header 头,成功请求到天地图的地图瓦片)
1
xmumiffy 2022-03-04 00:54:09 +08:00 via Android
给浏览器的应该是带时间戳的短效 key
不必区分来源,就看提供了什么鉴权方式 |
2
moonchild OP @xmumiffy 但我看这些地图服务商管理后台提供给浏览器应用的都是固定 ak ,上面提到我通过 postman 伪装成浏览器请求接口也是用的那个固定 ak
|
4
xy90321 2022-03-04 01:46:35 +08:00 via iPhone
如果你没打算做一个读心术鉴权系统的话,就不要纠结那么多。你模拟了一个浏览器请求,做得惟妙惟肖,那请问这个请求和真的浏览器又有什么差别呢?
|
5
murmur 2022-03-04 08:14:19 +08:00
地图都是用大服务器扛起来的,这东西在我国需要资质,不是谁都可以运营的,可能卷的没那么激烈吧
所以说别人对鉴权也没那么紧迫 而比如淘宝,处处 G 点,正常用户都触发风控,对我说的就是风控,直接阉割掉浏览器,靠手机端拿隐私信息风控 |
6
Chism 2022-03-04 08:26:47 +08:00 via Android
浏览器就别想了,总有办法模拟
|
7
sqmwin 2022-03-04 11:53:35 +08:00
浏览器鉴权的 token 可以用临时生成的,可以限制使用次数或限制时间;服务端和浏览器端的接口肯定得用不同方式处理
|
8
xuanbg 2022-03-04 12:32:13 +08:00
服务器调用只做认证不做鉴权。认证涉及到的关键因素无非就是:调用者身份是否存在,当前接口是否允许调用者访问,当前调用是否可信。
|
9
laozhoubuluo 2022-03-04 12:39:19 +08:00
ak+域名白名单肯定是不安全的,简单实现的方案就是 ak+sk+短期限(例如 5 分钟)。
如果安全性要求更高,建议再封装一个鉴权微服务,先做用户 Session 验证和权限控制,正常的请求再转发给地图微服务。 |
10
EscYezi 2022-03-04 12:42:16 +08:00 via iPhone
让调用方的后端维护 AK ,地图微服务开放一个 AK 换临时 key 接口就 ok 了
|