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

2020-03-27 17:21:33 +08:00
 Veneris

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

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

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

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

感谢。

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

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

或者 callback 直接是服务端,服务端获取到 token 之后跳到指定的 uri,app 从 uri 截取 token 或网页用 js bridge 传递给 app

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

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

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

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

© 2021 V2EX