关于渣浪oauth授权跳转的疑问。

2013-12-28 22:51:12 +08:00
 kmvan
我有一个网页应用,用户能在自己的网站(站A),通过自己的渣浪微博帐号授权我的网页应用,然后在网站上写文章能发布微博。
但我有以下疑问:

1.网页应用的回调(callback)地址,写的是我服务器(站B)的地址,那用户授权后,怎么返回到站A的页面呢?

可能我的思路有点乱,我描述一下操作过程:
用户在站A想要发微博 =》 点击授权链接 =》 弹窗一个授权协议(主机为weibo.com的)=》 点击确认授权 =》 跳转到我的服务器站B =》 ????(然后怎么搞)
跳转到站B后,我站B如何返回到站A呢?
3890 次点击
所在节点    程序员
16 条回复
txlty
2013-12-28 23:17:04 +08:00
oauth2.0很简单了。
请求平台authorize url,带上appid/appkey,callback url,回调地址。用户点击授权之后,跳转到回调地址(此处可加state验证防CSRF攻击)。给你返回的参数里有个code
用上面取得的code,请求平台的token url,获得access_token。
以后就用这个access_token,调用平台的api。
txlty
2013-12-28 23:27:08 +08:00
又看了一边楼主问题。真心没看懂。
你是康盛漫游app开发者?
kmvan
2013-12-28 23:36:10 +08:00
@txlty 感谢回复。but我还是有点混乱>_+
问题在这里,用户的站A,他只有akey、skey 和 callback url,用sdk算出授权页面地址后,点击授权,然后跳转是跳转到我服务器的页面啊,那站A怎么可以获取到跳转后的信息呢?
kmvan
2013-12-28 23:54:17 +08:00
@txlty 哪里不懂?我可以说到懂为止....
gracece
2013-12-28 23:57:32 +08:00
@kmvan 为什么要用B去处理微博授权呢?
kmvan
2013-12-29 00:01:55 +08:00
@gracece 因为回调页面的地址是B地址。而且用户的站点不是固定的啊。
gracece
2013-12-29 00:06:47 +08:00
@kmvan 好像有点明白你的意思了,类似于wordpress上能装多说,然后授权多说,在wordpress上发表文章时能选择同步到微博。
kmvan
2013-12-29 00:08:52 +08:00
@gracece 嗯,可以这样理解。但我的平台不是wp而已。
master
2013-12-29 00:22:21 +08:00
这个你需要多和A站约定一个协议。
当然做法很多,下面给出一种参考就是:

不是通过A战直接点到你的授权连接,而是A站给出一个连到B站的连接由B站的连接去调用授权页面(这样B站可以用事先约定好的方式知道是谁要通过自己来授权,然后当B站完成授权之后,再通过和A站约定好的方式告诉A站来完成最后的授权过程。
kmvan
2013-12-29 00:37:47 +08:00
@master 这样一说,我好像有点思路了。谢谢回复。明天我试试,#Q
txlty
2013-12-29 02:22:34 +08:00
这就分两种情况了。你在A站有下发服务端代码给他们执行的权限?还是只有执行JS的权限?

两种情况,你都需要用户(A站)在页面里载入一个你网站(B站)域下的JS文件。
用户完成授权,返回到B站是在窗口里。可以执行关闭窗口操作。
父页面还是A站,在窗口关闭时,通过JS请求B站数据,以确认是否登录成功。

如果有服务端代码权限,那么:
授权成功后,将获得的access_token写入A站域下的cookie。cookie过期时间等于access_token过期时间。然后A站就可以用这个access_token调用API发微博了。(tx微博不行,因为tx调用API还需要appid)

如果像社会化评论框那样,只有JS执行权限。那么:
授权成功后,将以后需要的cookie写入B站域下。
发微博时,在A站通过JS向B站发出请求。所有与平台的交互,都由B站完成。A站通过JS与B站通信。
也就是说,A站本身与平台无关。
B站用正常oauth2.0调用微博平台API,登录、发微博,同时作为一个平台,接收A站请求。

跨域问题,通过动态载入JS的方式解决。
dagger
2013-12-29 10:16:29 +08:00
如果只是要完成跳转,不考虑其它授权和安全的问题,为什么不直接把A站的url作为参数塞到在oauth请求里,这样的话callback回B站的时候B站只要提取这个参数然后跳转回A站不就可以了吗
rekey
2013-12-29 22:30:57 +08:00
B站搞完了以后通知A站来取...
kmvan
2013-12-30 11:35:28 +08:00
感谢楼上各路大侠回复。我参考了大家的意见,授权终于能成功work起来了。
原来有一个“安全域名”设置,在那个域名下的任何二级域名和页面都能成为授权路径,这样的话,就能通过uri参数作为回调,虽然看起来不是很安全。
谢谢大家解答~
julyclyde
2013-12-30 23:47:38 +08:00
总的来说这个设计有问题
你其实做的是嵌入别人网站的widget吧?
kmvan
2014-01-02 15:18:56 +08:00
@julyclyde 对,现在已经应用已经通过审核了。应用地址是 http://inn-studio.com/sinapicv2 屌图床

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

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

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

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

© 2021 V2EX