9

我正在研究 OAuth 2.0 协议。

我陷入了为不在 Web 服务器上运行的桌面/移动应用程序生成不记名令牌的问题。

对于 Web 应用程序,我很清楚 OAuth 2.0 协议流程。假设myapp.comprotectedresource.com代表用户 Alice 访问,然后 Alice 被重定向到,https://protectedresource.com/oauth?redirect_uri=https://myapp.com/oauth&[...]因此资源管理器在获得同意后,将 Alice 的浏览器重定向到一个页面,该页面将收集授权代码并使用它来获取承载令牌。

这工作正常且安全,因为protectedresource.com识别myapp.com域并仅向来自的请求释放不记名令牌myapp.com

如果我正在运行桌面应用程序,即使支持浏览器(即在 Windows 窗体中嵌入 HTML 查看器或类似的东西),我应该在同意后将 Alice 重定向到哪里?

谁收集授权码?控制流如何变化?

有人有在桌面或 Android 上运行的 OAuth 2.0 实施示例吗?

4

2 回答 2

7

OAuth wiki 列出了许多您可以使用的选项,所有这些选项都有缺点。最简单的方法是您运行一个可以向用户显示令牌的 Web 应用程序,然后用户将令牌(可能还有刷新令牌)复制到您的桌面应用程序中。

如果您有足够的时间,那么您可以研究向桌面操作系统注册自定义 URI,然后将其用作redirect_uri从浏览器自动传输回您的应用程序。这具有最佳的用户体验。

在这些情况下,恶意应用程序很容易伪装成您的桌面应用程序,而安全性取决于您的用户不安装恶意应用程序。

于 2012-12-07T19:18:02.273 回答
1

我有 ac# 桌面应用程序,我遇到了类似的问题。我没有得到关于如何在桌面应用程序中实现 OAuth 的正确答案。为了解决这个问题,我使用了内置的 webbrowser 控件并通过读取回调 URL 并生成令牌来读取身份验证代码。但几个月前 Shopify、eBay 和 QBO 等网站停止支持 IE11 和旧版本,不幸的是,内置的网络浏览器控件使用 IE11 的库,所以我再次陷入困境。

为了克服所有障碍,我实现了 c# listeners,它永久地解决了这个问题,现在我的应用程序是独立于浏览器的。

你可以在这里观看我的完整视频,也可以从这里下载示例项目。

于 2020-10-09T08:12:46.323 回答