前后端分离的页面在请求第三方授权时如何保证授权 token 可以绑定到当前账号

2020-04-24 16:00:04 +08:00
 DoUSeeMe

一定要认真地看下我的前提,一定要认真地看下我的前提,一定要认真地看下我的前提!!!

前提:

问题:如当前的用户 A 需要请求第三方授权,获取第三方授权后返回的 token 该如何确定是 A 发出的请求授权?

3700 次点击
所在节点    程序员
28 条回复
fancy111
2020-04-24 16:07:18 +08:00
有 token 了还需要前提? 自己写算法,把 A 的特征写进去,生成 token
index90
2020-04-24 16:14:15 +08:00
token 有签名的啊,根据数字签名验证是不是 A 发出的。
chmaple
2020-04-24 16:19:39 +08:00
去了解一下 Oauth2 的机制吧,ticket 的作用就是你这个。
b821025551b
2020-04-24 16:26:32 +08:00
主要取决于这个授权流程是怎样的;
1 、用户主动请求授权,有 UI 操作的,那么授权完成后应该回到你们自己的页面并带上 token,这时候前端拿着 token 和你们的 token 去和你们的后端交换数据;
2 、如果是静默授权,回调地址是你们服务器,这时候第三方应该会给出除 token 外其它参数,具体看他们文档。
DoUSeeMe
2020-04-24 16:29:09 +08:00
@fancy111
@index90

不知道是不是我表述的不够清楚,第三方授权不需要我传任何值给他,除了 return url,用户在完成第三方授权后会 POST 回调 return url 并传值。所以我只要赋值了第三方授权的地址,在任何地方打开授权都时可以的,问题是在于授权后如何判断 POST 回来的 token (第三方返回的 token 不会有任何标记) 是这个用户发出的
DoUSeeMe
2020-04-24 16:31:37 +08:00
@b821025551b 第三方授权不需要我传任何值给他,除了 return url,用户在完成第三方授权后会 POST 回调 return url 并传值。所以我只要给授权 url 赋值回调地址,在任何地方打开去授权都时可以的,问题是在于授权后如何判断 POST 回来的 token (第三方返回的 token 不会有任何标记) 是这个用户发出的。

也就是说发出时不允许有任何标记,返回时不会有任何标记,如果有 Session 那么问题就简单了,但是目前的情况不允许使用 Session
b821025551b
2020-04-24 16:35:45 +08:00
@DoUSeeMe #6 按你的描述是无解的,不过我觉得作为一个三方平台不会搞成这样,有公开文档么,闲着无聊看看。
telami
2020-04-24 16:45:02 +08:00
跟楼上
不需要这么隐晦,第三方授权如果是登录的话,无非微信、支付宝这些登录啥的,可以发出来看看,这些都做过的
DoUSeeMe
2020-04-24 17:09:20 +08:00
@b821025551b paypal 就是了。。
DoUSeeMe
2020-04-24 17:11:19 +08:00
KuroNekoFan
2020-04-24 17:17:24 +08:00
oauth 啊
DoUSeeMe
2020-04-24 17:19:23 +08:00
@KuroNekoFan 啊啊啊~看#6
b821025551b
2020-04-24 17:19:25 +08:00
@DoUSeeMe #10 这不是有个 redirect_uri 么。。。The URI of the page to which PayPal will redirect the merchant after they have granted you permission to process transactions on their behalf
blessyou
2020-04-24 17:21:28 +08:00
第三方授权登录没那么麻烦。
1. 用户点击授权登录按钮, 跳转到第三方。
2. 第三方判断用户授权, 给一个只能使用一次的 code 并且拼接到 return_uri 的 querystring 。
3. 前端 return_uri 页面 读取 querystring 上的 code 参数值 请求后端服务 api 。
4. 后端拿前端传来的 code 获取第三方授权信息, 后端拿你请求带上的 Token 凭证获取信息。
5. 后端判断 是否拿到了授权信息,拿到了授权判断是否绑定过,没绑定,就绑定成功。其余情况都是绑定失败。

基本就是这个逻辑吧。
huijiewei
2020-04-24 17:35:50 +08:00
第三方调用是不可能不给带 query 的,你的前提条件不存在

你发出来文档,我看看哪个第三方 API 这么牛逼
oott123
2020-04-24 20:39:04 +08:00
存 sessionStorage 里,后端不读,你读出来一起发给后端
DoUSeeMe
2020-04-24 21:16:54 +08:00
@huijiewei 很明显 Paypal 就是这样的存在
DoUSeeMe
2020-04-24 21:18:41 +08:00
@b821025551b #13 redirect_uri 不许带 query 啊啊啊啊~~~
huijiewei
2020-04-24 21:27:40 +08:00
@DoUSeeMe 发文档
mxT52CRuqR6o5
2020-04-24 22:04:11 +08:00
@DoUSeeMe 是文档里说不许带还是你测试下来不行?如果是后者大概率是你用的有问题

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

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

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

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

© 2021 V2EX