V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
moonchild
V2EX  ›  程序员

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

  •  
  •   moonchild · 2022-03-04 00:42:36 +08:00 via iPhone · 2060 次点击
    这是一个创建于 1020 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    第 1 条附言  ·  2022-03-04 18:01:07 +08:00
    目前各大地图服务商,对于服务端和浏览器端的鉴权方式比较明确了,如以上所描述。但是对于 android 端的鉴权方式,我不是很清楚。看高德地图的管理后台,提交 Android Studio 发布版 sha1 和 packageName 就可以得到一个 ak ,然后使用高德地图的 sdk 通过这个 ak 初始化就可以使用高德地图的服务。由于我没了解过安卓开发,所以不是很懂这个 sdk 是只简单用了 ak 来进行鉴权还是说其中也使用了另外的鉴权机制(比如用固定 ak 换临时 token ),但是现在自己的服务需要考虑如何对 app 端做鉴权,所以想看看有没有安卓大佬来点拨下
    11 条回复    2022-03-04 16:31:31 +08:00
    xmumiffy
        1
    xmumiffy  
       2022-03-04 00:54:09 +08:00 via Android
    给浏览器的应该是带时间戳的短效 key
    不必区分来源,就看提供了什么鉴权方式
    moonchild
        2
    moonchild  
    OP
       2022-03-04 01:00:15 +08:00 via iPhone
    @xmumiffy 但我看这些地图服务商管理后台提供给浏览器应用的都是固定 ak ,上面提到我通过 postman 伪装成浏览器请求接口也是用的那个固定 ak
    xmumiffy
        3
    xmumiffy  
       2022-03-04 01:37:53 +08:00 via Android
    @moonchild 那就说明这个鉴权无所谓,至少不是用来收费的
    xy90321
        4
    xy90321  
       2022-03-04 01:46:35 +08:00 via iPhone
    如果你没打算做一个读心术鉴权系统的话,就不要纠结那么多。你模拟了一个浏览器请求,做得惟妙惟肖,那请问这个请求和真的浏览器又有什么差别呢?
    murmur
        5
    murmur  
       2022-03-04 08:14:19 +08:00
    地图都是用大服务器扛起来的,这东西在我国需要资质,不是谁都可以运营的,可能卷的没那么激烈吧

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

    而比如淘宝,处处 G 点,正常用户都触发风控,对我说的就是风控,直接阉割掉浏览器,靠手机端拿隐私信息风控
    Chism
        6
    Chism  
       2022-03-04 08:26:47 +08:00 via Android
    浏览器就别想了,总有办法模拟
    sqmwin
        7
    sqmwin  
       2022-03-04 11:53:35 +08:00
    浏览器鉴权的 token 可以用临时生成的,可以限制使用次数或限制时间;服务端和浏览器端的接口肯定得用不同方式处理
    xuanbg
        8
    xuanbg  
       2022-03-04 12:32:13 +08:00
    服务器调用只做认证不做鉴权。认证涉及到的关键因素无非就是:调用者身份是否存在,当前接口是否允许调用者访问,当前调用是否可信。
    laozhoubuluo
        9
    laozhoubuluo  
       2022-03-04 12:39:19 +08:00
    ak+域名白名单肯定是不安全的,简单实现的方案就是 ak+sk+短期限(例如 5 分钟)。
    如果安全性要求更高,建议再封装一个鉴权微服务,先做用户 Session 验证和权限控制,正常的请求再转发给地图微服务。
    EscYezi
        10
    EscYezi  
       2022-03-04 12:42:16 +08:00 via iPhone
    让调用方的后端维护 AK ,地图微服务开放一个 AK 换临时 key 接口就 ok 了
    moonchild
        11
    moonchild  
    OP
       2022-03-04 16:31:31 +08:00
    @EscYezi 这是一个思路,这个思路可以同时应用于 app 端和浏览器端
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3376 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:10 · PVG 19:10 · LAX 03:10 · JFK 06:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.