【问题标题】:Windows User Impersonation in .NET Core on Linux?Linux 上 .NET Core 中的 Windows 用户模拟?
【发布时间】:2021-02-09 04:37:18
【问题描述】:

我正在用 C# 编写一个将在 Linux 服务器上运行的 .NET Core 应用程序,但我需要模拟 Windows 用户才能访问 Windows 服务器上的一些远程资源。我有在那里进行身份验证的凭据,但我看到的所有实现都依赖于“高级 Windows 32 基础 API”(advapi32.dll),这是一个在 Linux 上不可用的共享 Windows 库。

我该如何进行这项工作?

【问题讨论】:

  • Windows 用户需要一个后端进行身份验证。是 Active Directory 服务器吗?
  • 我可以针对 AD 服务器进行身份验证,并且我还可以访问 Windows Server 本身的本地身份验证。这将是我首选的身份验证方式。

标签: c# linux windows .net-core impersonation


【解决方案1】:

我能够通过跳出框框思考得到解决方案。我发现我可以使用SharpCifs.Core 进行CIFS 访问,使用Microsoft PowerShell SDK 来获取远程PowerShell 会话,并获取环境变量。我真希望微软能写出更好的跨平台工具。

【讨论】:

  • 我不确定 SharpCifs.Core 是否适用于更高版本的 SMB。我已经看到它是旧 JCifs 的一个端口。 SMB-1 存在安全问题,正在被替换。
  • 确实如此。我让它连接到 Windows 2016 网络位置。
  • 嗨@RootHouston,我尝试了您建议的库以打印到网络打印机。我正在使用 .NET Core 3.1,我的容器在 Linux 中运行。 SharpCifs.Config.SetProperty("jcifs.smb.client.lport", "8137"); var auth1 = new NtlmPasswordAuthentication("mydomain;my_username:my_pass"); var smb1 = new SmbFile($"smb://{printerName}", auth1); ... reportPrintTool.Print(smb1.GetCanonicalPath());出于某种原因,我仍然收到如下错误:访问打印机 '\\Printer_IP_Address' 的设置无效。
  • 您好,我从未使用它来访问打印机路径。你可以试试: var auth1 = new NtlmPasswordAuthentication("domain", "my_username", "my_pass");
【解决方案2】:

Mono 项目有几种 linux 命令的封装,其中之一是 seteuid(用于模拟的 linux 命令)。 NuGet 包Mono.Posix.NETStandard 值得一看。它似乎将在新的 .Net 5 版本中进行改进。我不确定它是否能满足您的需求...

【讨论】:

    猜你喜欢
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多