请教一下如何给同时提供给服务端和浏览器端的接口做鉴权

2022-03-04 00:42:36 +08:00
 moonchild

近期在维护一个地图微服务,需要给 api 接口加上鉴权,调用方有前端浏览器,安卓端和其他微服务。

参考了一下业内的鉴权方式,如天地图,百度地图和高德地图。这几家的鉴权方式都是大同小异,对于调用方需要区分是浏览器应用还是服务端应用,若是浏览器就采用 ak+域名白名单的方式鉴权,若是服务端就采用 ak+sk 加签的方式鉴权。

我也想采用这个思路,但是有两个疑问:

1.我服务内的同一个接口如何区分过来的请求是来自服务端或者是浏览器呢,这里做判断之后要用上述两种不同的方式去鉴权。

2.若一个无权限的服务端应用获取了其他浏览器应用的 ak ,自己加上 referer 和 user-agent 等 header ,伪装成浏览器应用请求接口,貌似这种鉴权方案就无法应对了。(因为我在浏览器拿到申请了天地图服务的 ak ,在本地用 postman 就可以轻易得加上上述的 header 头,成功请求到天地图的地图瓦片)

2072 次点击
所在节点    程序员
11 条回复
xmumiffy
2022-03-04 00:54:09 +08:00
给浏览器的应该是带时间戳的短效 key
不必区分来源,就看提供了什么鉴权方式
moonchild
2022-03-04 01:00:15 +08:00
@xmumiffy 但我看这些地图服务商管理后台提供给浏览器应用的都是固定 ak ,上面提到我通过 postman 伪装成浏览器请求接口也是用的那个固定 ak
xmumiffy
2022-03-04 01:37:53 +08:00
@moonchild 那就说明这个鉴权无所谓,至少不是用来收费的
xy90321
2022-03-04 01:46:35 +08:00
如果你没打算做一个读心术鉴权系统的话,就不要纠结那么多。你模拟了一个浏览器请求,做得惟妙惟肖,那请问这个请求和真的浏览器又有什么差别呢?
murmur
2022-03-04 08:14:19 +08:00
地图都是用大服务器扛起来的,这东西在我国需要资质,不是谁都可以运营的,可能卷的没那么激烈吧

所以说别人对鉴权也没那么紧迫

而比如淘宝,处处 G 点,正常用户都触发风控,对我说的就是风控,直接阉割掉浏览器,靠手机端拿隐私信息风控
Chism
2022-03-04 08:26:47 +08:00
浏览器就别想了,总有办法模拟
sqmwin
2022-03-04 11:53:35 +08:00
浏览器鉴权的 token 可以用临时生成的,可以限制使用次数或限制时间;服务端和浏览器端的接口肯定得用不同方式处理
xuanbg
2022-03-04 12:32:13 +08:00
服务器调用只做认证不做鉴权。认证涉及到的关键因素无非就是:调用者身份是否存在,当前接口是否允许调用者访问,当前调用是否可信。
laozhoubuluo
2022-03-04 12:39:19 +08:00
ak+域名白名单肯定是不安全的,简单实现的方案就是 ak+sk+短期限(例如 5 分钟)。
如果安全性要求更高,建议再封装一个鉴权微服务,先做用户 Session 验证和权限控制,正常的请求再转发给地图微服务。
EscYezi
2022-03-04 12:42:16 +08:00
让调用方的后端维护 AK ,地图微服务开放一个 AK 换临时 key 接口就 ok 了
moonchild
2022-03-04 16:31:31 +08:00
@EscYezi 这是一个思路,这个思路可以同时应用于 app 端和浏览器端

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/837825

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX