winforms - 使用 WinForms 应用程序的 OAuth/OIDC SSO 的最佳实践?
问题描述
我们正在向当前使用 Windows 集成身份验证进行单点登录的应用程序添加现代身份验证 (OAuth/OIDC)。用户登录到 Windows 工作站,许多应用程序可以使用这些凭据,并通过 Kerberos 透明地进行身份验证。
我们的应用程序是一个基于 .net Web 服务的应用程序,我们有一个用于浏览器用户的客户端和一个 WinForms 中的桌面客户端。浏览器场景没有问题,因为身份提供者将信息存储在浏览器中,这些信息可以以类似于 WIA (IWA) 的方式跨应用程序重用,但我们不确定处理 WinForms 桌面应用程序案例的最佳方式。当前,WinForms 应用程序打开一个浏览器窗口以使用典型的基于浏览器的方法进行身份验证。来自身份提供者的详细信息通过浏览器使用重定向和基于自定义协议的 URL 传递回 WinForms 应用程序。
这一切都很好,但用户体验不是很严格,对于用户已经登录的情况,要求他们在浏览器窗口中按下一个按钮,因为当前基于 Chromium 的浏览器似乎不愿意在没有最近的情况下进行重定向用户交互。
有没有更好的办法?
解决方案
根据RFC8252的标准选项如您所述:
- 通过系统浏览器登录
- 使用基于环回或私有方案的 URL
我有一些关于此的博客文章,这是一个棘手的流程。这些帖子链接到您可以运行的代码示例,这些示例可以稍微探索一下用户体验。您可能会发现环回 URL 避免了单击按钮的需要,尽管我个人认为基于私有方案的 URL 更干净。
您可以做一些 UX 的事情,例如一个插页式网页,以更好地控制断开连接的浏览器中发生的事情。我见过公司在桌面登录后重定向到他们自己的网站,以使用户体验更好。
从长远来看,我希望这将被API 驱动的 OAuth 流程所取代,这样您就无需离开应用程序。现在你可能不得不忍受一些 UX linitations,但从安全的角度来看,这是正确的流程。
推荐阅读
- ruby - 带有 => 和的哈希有什么区别:
- python - 从 Shapely 多边形中获取顶线
- pycharm - 如何在 Pycharm 中切换显示空白?
- docker - 将今天的日期设置为环境变量
- amazon-web-services - 如何从 C# 访问 AWS CLI 资源?
- python - 我可以从脚本中的命令行中分离 python 脚本吗?
- django - 为什么我在创建新的 Django 应用程序时会发生冲突
- javascript - 如何计算jsp中选定的单选按钮?
- c - 如何在我的程序中不定义 x 和 y 的情况下运行此代码?
- android - 如何使 ListView 循环?