V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Veneris
V2EX  ›  问与答

关于 OAuth 在移动端的一点疑惑

  •  
  •   Veneris · 2020-03-27 17:21:33 +08:00 · 938 次点击
    这是一个创建于 1707 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用户在 app 点击授权后会跳转网页,在网页确认授权后会把 code 和 state 重定向到回调地址,这时候可以用 code 去调用接口获得 token 。 但是如果回调地址是服务器的话,app 端如何能得知服务器端已经拿到 token 了呢? (长链接?轮询?)

    服务器又如何将 token 下发到对应的客户端呢? (使用 state 作为唯一标识?但似乎很多 OAuth 压根不返回 state )

    当然也可以曲线救国,例如授权后重定向到 localhost,客户端拿到 code 再去请求服务器获取 token 。 (毕竟 secret 肯定要放在服务器端)

    但无论如何都比较丑陋...请问最合理,正确的实现方式是什么呢?

    感谢。

    3 条回复    2020-03-27 21:44:47 +08:00
    welkinzh
        1
    welkinzh  
       2020-03-27 17:40:29 +08:00
    我之前和 app 端调试,redirect_uri 随便填的,就算回调的 uri 不通也无所谓,授权后的 uri 里是有 code 和 state 的。
    当然我不知道这种实现是否合理,想看看大家的做法。
    Veneris
        2
    Veneris  
    OP
       2020-03-27 21:38:11 +08:00
    @welkinzh 开发阶段当然没问题,问题是线上环境...
    chinvo
        3
    chinvo  
       2020-03-27 21:44:47 +08:00 via iPhone
    @welkinzh #1 用 urn:ietf:wg:oauth:2.0:oob 和 http://localhost 都可以,都是推荐方法。

    获取到的 token 发送给自己的服务端,在服务端完成换 token 操作

    或者 callback 直接是服务端,服务端获取到 token 之后跳到指定的 uri,app 从 uri 截取 token 或网页用 js bridge 传递给 app
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2985 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 14:58 · PVG 22:58 · LAX 06:58 · JFK 09:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.