[求助] Windows 桌面客户端怎么优雅地进行 OAuth 授权?

2019-02-24 22:26:06 +08:00
 Kiriz

最近在写一个网站的第三方 Windows 客户端,wpf

网站授权用的是 OAuth 授权

一般流程是 登录网站 → 授权 → 回调 → 返回 token

由于这个网站登录必须要验证码,而且验证码机制好像挺复杂,思考了两天没办法用单纯的 http client 来解决

所以就考虑内置一个浏览器了(

现在有几个思路,但都不是很好:

  1. 用原生的 webbrowser,优点是内置,快,小 缺点是 IE 或者有其他坑 具体还没研究
  2. 用现代一点的 webview,优点是 Edge 缺点是要求 Windows10 1803 以上 老系统不友好
  3. 用 Cef ( Chromium ),优点是相比 2 几乎没有系统要求 缺点是程序要带一个 100+M 的 ceflib (可以 headless 而且授权结束后可以杀掉 chromium 内存其实很安逸
  4. electron 不会考虑的 一方面不会写 另一方面长得像浏览器 嫌弃, 个人也不可能做到 vs code 级别的优化
  5. 调用默认浏览器,最后把 token 显示在屏幕上,让用户复制进客户端。。。

那么有什么更好的方案吗?

2507 次点击
所在节点    程序员
11 条回复
yexiaoxing
2019-02-24 22:44:00 +08:00
调用浏览器,并本地监听一个 HTTP 服务(不一定要 80 );授权完成,通过 HTTP 服务反馈给应用?
janus77
2019-02-24 22:51:22 +08:00
就一个授权页,而且一般是一次性使用 几秒钟就跳过去了。当然是考虑兼容性最好的啊
ysc3839
2019-02-24 23:16:05 +08:00
1 和 2 可以看作同一个方案。WebBrowser 可以用一些 hack 的方法使用 Edge 的内核。不 hack 的话也可以实现检测操作系统版本然后进行选择。
3 是兼容性最佳的方案,至于体积则是看你能不能接受了,能接受的话推荐这个方案。
4 不如 CEF。
5 的话对用户不太友好,同时兼容性也不好保证。
ysc3839
2019-02-24 23:23:07 +08:00
@ysc3839 CEF 较旧的版本体积会小一点,如果确认登录页面在旧版本下没问题的话可以选择。
MonoLogueChi
2019-02-24 23:27:37 +08:00
按理说第一个方案可行性是最高的,现在需要操作的只有一个网站,甚至是只有两个页面,确定 IE 兼容就可以了
orangeade
2019-02-24 23:41:00 +08:00
我记得 Google Drive 就是本地起个 HTTP
Tink
2019-02-24 23:41:37 +08:00
调用 chrome
theks
2019-02-25 01:01:18 +08:00
我觉得你可能想复杂了。
网页中的验证码应该用到了 session 或者 cookie 标识,一般是程序生成一个图片以流的形式直接返回响应,就像网络上的一个静态图片一样。
应该可以用 httpwebclient 或者 httprequest 请求这个二维码地址,把拿到的 cookie(在响应的 header 里,session 也是基于 cookie 的)传递给登录接口,把图片(响应的 content 部分是图片的二进制流)写入到 winform 的 image 控件显示出来。
我四五年没有碰过.net 了,只是提供个思路,不保证你能按我说的实现。
applehater
2019-02-25 01:25:34 +08:00
wpf 应该有网页控件并且可以拦截 http 请求吧,拦截道授权码就行。登录页面应该简单也不会有多大不兼容。vs 就是 wpf 开发的,可以看看 vs 登录微软账号是怎么做的咯
Eytoyes
2019-02-25 08:48:35 +08:00
客户端与 Chromium 分离出来,安装好客户端后再去下载 Chromium 解压出来,个人愚见
micate
2019-02-25 09:42:08 +08:00

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

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

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

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

© 2021 V2EX