本人正在做使用 OneDrive 作为云端存储的应用,目前已经调试通过了 OneDrive 的授权、通过授权码调用 API 的流程,但是遇到了一个问题。
因为应用是需要用户登录自己的 OneDrive 对应用进行授权,从而允许应用上传数据到用户的 OneDrive,所以需要存储很多的授权码到服务端,并且授权码与用户信息相关联。
我大概描述一下我的目前实现:
问题就出现在第二步的接口回调中,我暂时想不到办法将用户的信息从客户端传递到回调的接口中,也就是不能在接收到 授权码 之后判断这个授权码属于哪个用户的。
求助万能的 V 友,有什么好的解决方法吗?
1
Mystery0 OP 补充: 微软的重定向 Url 有限制:URL 必须以 https:// 开头,不得包含查询字符串参数且长度不超过 255 个字符。
看起来这个 Url 只能写死 |
2
xxxy 2019-05-03 23:56:24 +08:00 via Android 2
还有个 state 字段的,在授权前保存到 session 中,成功后,redirect_url 原样返回 state 字段,这样就可以辨别了
|
3
uestc 2019-05-03 23:57:25 +08:00 via Android 1
把你的回调页面做成一个 bridging page ?可以参考下 oneindex 的实现
|
4
geelaw 2019-05-04 00:04:08 +08:00 1
传递信息的方式是再写一个中转页面来做 AJAX。在服务器上,你有了授权码就可以获取 token,获得 token 之后可以查询用户的 CID。
|
5
Mystery0 OP |
6
chinvo 2019-05-04 00:11:21 +08:00 via iPhone 1
方法 1、应用内用某种方法和回调页面共享用户登录状态,比如 cookie/session/token
方法 2、回调到 localhost / urn:ietf:wg:oauth:2.0:oob,然后 app 再把获取到的授权码通过 api 发给自己的服务器 |
7
Mystery0 OP |
9
huangdayu 2019-05-04 07:36:56 +08:00 via Android
Oauth 不是使用 code 再请求 token 的吗? Oauth 标准要求客户端如果传了 state 参数,服务端就必须一模一样的回传,难不成微软自己搞一套
|