使用 WinForms 应用程序 OAuth/OIDC SSO 的最佳实践?

Best practice for OAuth/OIDC SSO with a WinForms app?

我们正在向当前使用 Windows 集成身份验证进行单点登录的应用程序添加新式身份验证 (OAuth/OIDC)。用户登录 Windows 工作站,许多应用程序可以使用这些凭据,身份验证通过 Kerberos 透明进行。

我们的应用程序是一个基于点网 Web 服务的应用程序,我们有一个客户端供使用浏览器的用户使用,还有一个 WinForms 桌面客户端。浏览器场景不是问题,因为身份提供者将信息存储在浏览器中,这些信息可以以类似于 WIA (IWA) 的方式跨应用程序重复使用,但我们不确定处理 WinForms 桌面应用程序案例的最佳方式。目前,WinForms 应用程序打开浏览器 window 以使用典型的基于浏览器的方法进行身份验证。使用重定向和基于 URL.

的自定义协议,来自身份提供者的详细信息通过浏览器传回 WinForms 应用程序

一切正常,但用户体验不是特别严格,并且在用户已经登录的情况下,需要他们按浏览器中的按钮 window 作为当前基于 Chromium 的浏览器似乎不愿意在没有最近的用户交互的情况下进行重定向。

有没有更好的方法?

根据RFC8252的标准选项如您所述:

  • 通过系统浏览器登录
  • 使用环回或基于私有方案URL

我有一些关于此的 blog posts,这是一个棘手的流程。您可以 运行 编写示例代码的帖子 link 可以稍微探索一下用户体验。您可能会发现环回 URL 避免了单击按钮的需要,但我个人认为基于 URL 的私有方案更清晰。

您可以做一些用户体验方面的事情,例如插页式网页,以更好地控制断开连接的浏览器中发生的事情。我见过公司在桌面登录后重定向到他们自己的网站,以改善用户体验。

从长远来看,我希望它会被 API Driven OAuth Flows 取代,这样您就永远不需要离开应用程序。现在您可能不得不接受一些 UX 限制,但从安全角度来看这是正确的流程。