c# - 使用带有 Active Directory ADFS 的 WPF 客户端对 Cloud NodeJS 后端进行身份验证
问题描述
我过去问过一个类似的问题:Understanding ADFS Login With Windows Native WPF Client,我似乎对如何在 WPF Native Windows 应用程序上使用活动目录 ADFS 进行身份验证有了更好的理解(我可以使用 ADAL 库),但是我仍然不知道如何将该身份验证传输到远程服务器(NodeJS 服务器)
我还发现我可以做这样的事情,以便本机 WPF 应用程序找到当前登录的用户,并且通过使用这个,WPF 知道用户是合法的,因为他们登录到他们的 Windows 帐户.
var context = new PrincipalContext(ContextType.Domain, DOMAINNAME);
var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, Environment.UserName);
但是,我不知道如何将此身份验证传输到我们的远程 NodeJS 服务器(没有 UI,WPF 应用程序就是 UI)。我可以发送我们的远程应用程序详细信息,例如 samAccountName 是this
,但任何人都可以发送到我们的远程服务器并声称他们的 samAccountName 是this
。WPF 知道用户是合法的,但我们的 NodeJS 应用程序无法验证这一点。如果我将私有证书添加到我们的 WPF 应用程序以供我们的 NodeJS 服务器验证,则可以反编译 WPF 应用程序以获取证书。我该如何解决这个问题?
解决方案
您正在考虑在错误的上下文中进行身份验证。例如,由于 Node 服务器为您提供服务,因此每个客户端都应该向 Node 服务器表明自己的身份,以便使用 Node 服务。在您的实现中,您正在从 AD 对 wpf 进行身份验证,这没问题,但是 WPF 应用程序充当 Node 服务器的客户端,因此应该有另一个身份验证来提供有效 wpf 客户端连接到服务器的声明。
现在说到重点,您想从 AD 验证 WPF 客户端 + 节点服务器。在这种情况下,实际上您是从某个源(即 AD)验证这两个应用程序。为此,您需要一些中间件,它可以验证这两个应用程序。
这种情况的答案是 Microsoft Identity Server。请访问一些教程,希望它能解决您的要求。
推荐阅读
- django - 通过 url 传递过滤器变量并通过重定向保留它们
- apache-spark - 流式传输:翻转窗口与微批处理
- android - 从android布局引用图像不起作用
- java - 从数组列表中删除元素的最有效方法?
- ruby-on-rails - current_user nil 同时使用有权限的omniauth
- c# - 仅在为 Unity 填写所有必填字段时才注册的条件语句
- java - Mongodb 聚合多个字段。如何别名 _id 字段以映射到正确的对象
- c# - bower_components 文件夹未部署到 Azure
- xml - XML Marshalling 生成没有 Root 的 XML
- java - JavaFX Spinner 从场景中移除后继续运行