如何使用与我当前登录的用户不同的用户将文件保存到文件系统?
我目前正在使用 .NET Framework 4.0。
如果您有其他用户的登录凭据,则可以冒充其他用户
Win32中使用DLL Import调用LogonUser
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
int dwLogonType, int dwLogonProvider, out SafeTokenHandle phToken);
然后你可以在你的代码中进行模拟
SafeTokenHandle safeTokenHandle;
string userName, domainName, password;
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;
bool returnValue = LogonUser(userName, domainName, password,
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
out safeTokenHandle);
来自 MSDN FileInfo.SetAccessControl
:
为参数指定的 ACL
fileSecurity
将替换文件的现有 ACL。要为新用户添加权限,请使用该GetAccessControl
方法获取现有 ACL,对其进行修改,然后使用SetAccessControl
将其应用回文件。
所以,假设我们有一个有FileInfo
问题的文件:
// FileInfo file = ...;
var acl = file.GetAccessControl();
// Add or Remove access rules on this FileSecurity object
acl.AddAccessRule(new FileSystemAccessRule(
@"domain\someuser",
FileSystemRights.FullControl, /* pick something less */
AccessControlType.Allow));
file.SetAccessControl(acl);
或者,如果您需要在保存文件之前执行此操作,则需要使用Impersonation:
// You'd be best served to beg, borrow, and steal the LogonUser
// code from the MSDN article.
using (var identity = new WindowsIdentity(token))
using (var context = identity.Impersonate())
{
using (var stream = File.OpenText("impersonated.txt"))
{
// ... write
}
}
我们有一个在专用服务帐户下运行的旧 ASMX Web 服务,我们的应用程序向它发送 Web 请求。文件以字节数组的形式发送到服务,服务将文件写入共享位置。您需要确保您有足够的安全性并为使用它的应用程序登录!