V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qfdk
V2EX  ›  程序员

手机端 OAuth2 认证

  •  
  •   qfdk ·
    qfdk · 2022-07-25 14:47:16 +08:00 · 1613 次点击
    这是一个创建于 850 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近思考了一个问题,手机端如何保存 client_secret 的最佳实践 ?

    事情是这样的,经过了一年的业务升级迁移,node 做的 gateway 已经逐渐稳定,oauth2 也用 node 写了一个,为了搞明白原理而已。https://www.v2ex.com/t/731916

    用户认证 是通过 gateway 的,为了避免用户直接拿到 token ,我把 token 放在了 session 里面,这样用户么有明文 token 来请求接口了。

    现在突然想到,如果是手机端如何处理呢?如果是 用 OAuth2 会发送 client_secre 来换取 AT 。再通过 AT 来请求后端接口获取数据,看了几个 flutter 的例子,client_secret 都是本地储存,因为手机端我认为不被信任,因为可以通过各种手段来获取到 client_secret

    搜到的资源如下 :

    有个叫做 PKCE 的东西 OAuth2 协议的扩展版本是支持的,这里是产生动态随机码,跳过了 client_secret 要保存在客户端的问题。

    但是如果授权服务器不支持 PKCE 的情况下有没有什么最佳实践呢 ?

    9 条回复    2022-07-26 19:33:04 +08:00
    dzdh
        1
    dzdh  
       2022-07-25 14:51:52 +08:00
    看了一下 PKCE 是防止被拦截请求。本质上仍然需要一个 CODE 在本地。否则你调用接口的凭据是什么呢。
    qfdk
        2
    qfdk  
    OP
       2022-07-25 14:59:59 +08:00
    @dzdh #1 code_verifier 是随机的,等于是 需要一个 code + code_verifier 来换取 token ,成本增加了一点点。
    所以现在找个最佳实践来解惑,看到好多是保存在本地的例子
    unco020511
        3
    unco020511  
       2022-07-25 16:02:14 +08:00
    你都 https 了,第三方怎么获取你的 token 呢?用户自身拿到 token(比如抓包)那很正常啊
    xianzhe
        4
    xianzhe  
       2022-07-25 19:24:09 +08:00
    @qfdk PKCE 目的就是解决你这个问题,但是你说不支持 PKCE 那就很搞了
    xiangyuecn
        5
    xiangyuecn  
       2022-07-25 20:15:55 +08:00
    严禁掩耳盗铃🐶
    qfdk
        6
    qfdk  
    OP
       2022-07-26 01:21:03 +08:00
    @xianzhe #4 是吧,看来木有好法子了
    qfdk
        7
    qfdk  
    OP
       2022-07-26 14:41:09 +08:00
    @xiangyuecn #5 啊啊啊啊,虽然很星象,但是也是我思考的问题 在 PKCE 出来之前那都是如何解决的呢
    nyxsonsleep
        8
    nyxsonsleep  
       2022-07-26 17:49:52 +08:00   ❤️ 1
    没细看,不过你不像让用户不知道 token 是什么是不可能的。本地的东西怎么可能不让用户不知道数据是多少。
    ---
    看法是要么加盐,还要可逆。这样使得用户每次的 token 都会发生变化。s 端还能解密回来知道 token 真实值。再每隔一个周期重新生成 token 。
    以上简称为“算法”,也就是 app 与 s 端通讯的签名。
    事实上无论哪家的算法都有被破过,但是不是永远被破。
    因为破解这玩意是有成本的,比如算法放在 so 里,手机里装 xp 然后慢慢 hook 。虚拟机 dump 吧。汇编慢慢看,这得花多少时间,你的 app 值这个时间吗?
    谁有这个闲心每个版本都破一遍?换个算法对于作者什么成本,破解者什么成本?
    《没有绝对安全的系统》
    qfdk
        9
    qfdk  
    OP
       2022-07-26 19:33:04 +08:00
    @nyxsonsleep #8 感谢回复,其实是这样的,我的业务对象是面相高校的,学校有专门的安全专业,在来之前他们的 token 是裸露的,导致很多学校拿着 token 进行“非法请求”、后来经过改进 加了谷歌验证码 还有 token 非直接留给客户端就少了很多 奇怪的请求。 我们手机业务是外包给第三方的,我在思考如果让我做一个手机 app 我应该如何处理。
    您说的对没有绝对的安全,但是对于这些“闲”学生还是要斗智斗勇的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5377 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 01:31 · PVG 09:31 · LAX 17:31 · JFK 20:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.