如何使用 SAML 对 Windows 窗体客户端进行身份验证?

Posted

技术标签:

【中文标题】如何使用 SAML 对 Windows 窗体客户端进行身份验证?【英文标题】:How to authenticate a Windows Forms client using SAML? 【发布时间】:2021-04-30 16:13:36 【问题描述】:

我一直在研究使用身份提供程序 (IDP) 为 Windows 窗体客户端提供用户身份验证。用户凭据将由 Auth0 托管。使用 Auth0 创建试用帐户后,我下载了一个示例 C# Windows 窗体客户端应用程序,该应用程序可用于使用 OpenID Connect(“OIDC”)对 Auth0 IDP 进行身份验证。 WinForms 示例应用程序会弹出一个 Web 浏览器组件,显示 Auth0 登录屏幕,我登录到 Auth0 IDP(在 Auth0 中设置了一些测试凭据),然后向 WinForms 应用程序发送一个身份验证令牌。一切都很好,如果我再次尝试登录,我不再需要输入我的凭据。

但是...我将从生产中获取身份验证数据的公司希望使用 SAML。有没有办法做到这一点?根据我所阅读的内容,SAML 需要一个“服务提供者”来接收来自 IDP 的凭据。服务提供者(通常?)是一个网站。这似乎与我正在尝试做的事情不太匹配(验证 Windows 客户端)。有什么方法可以使用 SAML 来完成我使用 OIDC 所做的工作(从 IDP 获取用户的身份验证信息)?我需要为此开发一个单独的服务提供者组件吗?

【问题讨论】:

【参考方案1】:

听起来你到目前为止所做的在架构上很好:

符合 OIDC 标准的现代桌面应用

这使您在架构上处于有利位置,其中:

您的应用使用 OIDC 从 Auth0 获取令牌 Auth0 可以与其他基于标准的身份提供者(可能是 SAML、OIDC、WS-Federation 或其他任何标准)进行联合身份验证 无需更改应用中的任何代码即可完成此操作 - 而且您的应用无需了解 SAML

感觉您需要建立从 Auth0 到 SAML 服务提供者的联合连接,这通常涉及以下步骤:

您向合作伙伴提供您的实体 ID 和响应 URL,以将令牌发布到 他们为您提供实体 ID、公钥证书和请求 URL 您围绕帐户关联配置规则,以便用户可以在他们的系统和您的系统之间进行匹配

但有一些先决条件,并且外部身份提供者需要符合 SAML 2.0。我的Federated Logins Article 可能会帮助您理解一般概念,但我不会在这里深入研究 SAML 细节。

【讨论】:

感谢您提供的信息。问题基本上是问我如何让我们的 Windows 应用程序与 SAML IDP 一起工作。在了解有关该主题的更多信息后,这似乎具有挑战性,因为 SAML 旨在与 Web 应用程序一起使用。所以看来我需要实现某种网络 SAML“代理”(服务提供者)。你说得对,Auth0 本身可以说 SAML。

以上是关于如何使用 SAML 对 Windows 窗体客户端进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak 客户端设置,SAML 私钥暴露

创建 WCF 休息服务以接受 SAML 并对 Windows 用户进行身份验证

如何对私有 Windows 窗体进行单元测试?

如何在 Visual C++ 中使用 Windows 窗体创建特定控件?

SignalR - 在Windows窗体服务器上验证Windows窗体用户

Android/iOS:如何使用 SAML 协议通过 Azure AD 为移动设备提供 SSO