如何将 OAuth 授权得到的 Authorization Code 与用户相关联

2019-05-03 23:49:58 +08:00
 Mystery0

本人正在做使用 OneDrive 作为云端存储的应用,目前已经调试通过了 OneDrive 的授权、通过授权码调用 API 的流程,但是遇到了一个问题。

因为应用是需要用户登录自己的 OneDrive 对应用进行授权,从而允许应用上传数据到用户的 OneDrive,所以需要存储很多的授权码到服务端,并且授权码与用户信息相关联。

我大概描述一下我的目前实现:

  1. 用户主动触发授权的操作(单击按钮什么的),这个时候应用通过 WebView 调用我提前在服务端写好的 html 进行授权( html 仅仅是封装了一些必须填的参数 [微软需要的数据,包括后面会用到的 重定向 Url ] ),然后 html 会自动跳转微软的授权页面,授权成功之后会主动回调我配置好的 重定向 Url ,由于这个 重定向 Url 需要在 https://apps.dev.microsoft.com 进行配置,所以不能使用动态的方式(已测试过动态 Url [ url 的路径中带上自己的参数] 和带参的方式 [最后加上?uid=xxx ] ,都会在不同的地方提示 重定向 Urldev 中配置的不一样)。
  2. 如果授权成功,会回调服务端的一个接口,在这个接口中拿到 授权码 ,因为 授权码 是在之后使用的,同时不同的用户有不同的授权码,所以需要将 授权码 与用户信息关联起来。

问题就出现在第二步的接口回调中,我暂时想不到办法将用户的信息从客户端传递到回调的接口中,也就是不能在接收到 授权码 之后判断这个授权码属于哪个用户的。

求助万能的 V 友,有什么好的解决方法吗?

3544 次点击
所在节点    微软
9 条回复
Mystery0
2019-05-03 23:54:03 +08:00
补充: 微软的重定向 Url 有限制:URL 必须以 https:// 开头,不得包含查询字符串参数且长度不超过 255 个字符。

看起来这个 Url 只能写死
xxxy
2019-05-03 23:56:24 +08:00
还有个 state 字段的,在授权前保存到 session 中,成功后,redirect_url 原样返回 state 字段,这样就可以辨别了
uestc
2019-05-03 23:57:25 +08:00
把你的回调页面做成一个 bridging page ?可以参考下 oneindex 的实现
geelaw
2019-05-04 00:04:08 +08:00
传递信息的方式是再写一个中转页面来做 AJAX。在服务器上,你有了授权码就可以获取 token,获得 token 之后可以查询用户的 CID。
Mystery0
2019-05-04 00:05:35 +08:00
chinvo
2019-05-04 00:11:21 +08:00
方法 1、应用内用某种方法和回调页面共享用户登录状态,比如 cookie/session/token
方法 2、回调到 localhost / urn:ietf:wg:oauth:2.0:oob,然后 app 再把获取到的授权码通过 api 发给自己的服务器
Mystery0
2019-05-04 00:14:23 +08:00
另一位朋友想到一个方法:将回调授权码的接口写成一个中转的接口,然后在接口中将授权码以自定义 scheme 的形式回调到客户端( APP ),再由客户端将授权码和用户信息一并提交到服务端。
@uestc
@geelaw
两个的解决办法似乎和这个方法是一样的?( oneindex 使用 php 写的,本人 php 仅在入门水平……)( ajax 的话没有去了解过……我猜测和这个思路一个意思?)
Mystery0
2019-05-04 00:15:49 +08:00
@chinvo
@geelaw
@xxxy
@uestc
感谢各位了,目前看来大家都是一样的解决方法,十分感谢
huangdayu
2019-05-04 07:36:56 +08:00
Oauth 不是使用 code 再请求 token 的吗? Oauth 标准要求客户端如果传了 state 参数,服务端就必须一模一样的回传,难不成微软自己搞一套

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

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

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

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

© 2021 V2EX