使用 ASP.NET 模拟读取远程文件

2024-02-27

我想阅读远程服务器上存储的 PDF。我已获得具有读取访问权限的用户名/密码。

我正在使用此 url 中给出的 ASP.NET 模拟https://support.microsoft.com/kb/306158 https://support.microsoft.com/kb/306158

我将所有内容记录到日志文件中只是为了帮助调试。

 StreamWriter sw = new StreamWriter(Server.MapPath("~/log/logFile.txt"), true);
 sw.WriteLine("Just before Impersonation");

 if(impersonateValidUser("username", "domain", "password"))
 {
    try
     {
          byte[] bytes = File.ReadAllBytes(documentName);
          sw.WriteLine("Bytes read!!");
          undoImpersonation();
     }
    catch(Exception ex)
    {
       sw.WriteLine(ex.Message + "\n" + ex.StackTrace);
       return;
 }
 else
 {
    sw.WriteLine("Impersonation Failed");
            return;
 }

在我的日志文件中,我只看到“就在模拟之前”。 try 和 catch 块的消息都不会写入日志文件。令人惊讶的是,我没有看到模拟失败的消息。

只是想知道是否有人以前有过这种行为的经历?访问远程计算机上的文件是否有任何额外要求?我知道远程机器确实有 advapi32.dll 和 kernel32.dll


我们在使用 MSDN 示例时也遇到了问题,如果我没记错的话,这与句柄过早关闭有关。

我们最终用以下方式重写了它,这对我们来说非常有效:

    private void DoLogin()
    {
        var token = LogonAsUser(userName, domain, password);
        if (!IntPtr.Equals(token, IntPtr.Zero))
        {
            WindowsImpersonationContext impersonatedUser = null;
            try
            {
                var newIdentity = new WindowsIdentity(token);

                impersonatedUser = newIdentity.Impersonate();

                // Do impersonated work here
            }
            finally
            {
                if (impersonatedUser != null)
                {
                    impersonatedUser.Undo();
                }
                LogonAsUserEnd(token);
            }
        }
    }

    private IntPtr LogonAsUser(String userName, String domain, String password)
    {
        IntPtr token = IntPtr.Zero;

        if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
        {
            return token;
        }
        else
        {
            return IntPtr.Zero;
        }
    }

    private void LogonAsUserEnd(IntPtr token) {
        if (!IntPtr.Equals(token, IntPtr.Zero))
        {
            CloseHandle(token);
        }

    }

另一边注:我们将 LogonUserA 定义为返回 bool,而不是 int,这也可能是您遇到的问题的一部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ASP.NET 模拟读取远程文件 的相关文章

随机推荐

  • 如何从 sfUser 获取 id?

    我正在使用 symfony 1 4 我使用 sfDoctrineGuardPlugin 作为身份验证工具 我想捕获用户的 ID 以便将其存储在我的表中 经过一番小研究 我想我必须使用这个表达方式 getUser gt getGuardUse
  • 如何检测我是否处于“控制台”模式

    我正在编写一个从浏览器运行的应用程序 然而 一些模型函数也是从 Yii2 控制台调用的 因此 我在尝试访问 GUI 中设置的变量时遇到错误 是否可以知道我处于哪种模式 是否自动设置了一些环境变量 或者我应该在控制台应用程序中设置一些会话变量
  • 如何使用 MVC5 和实体框架使用自定义属性更新 IdentityUser

    我正在使用内置的身份框架进行用户管理 并且想向 AspNetUsers 表添加一些自定义项 到目前为止 我遇到的每个问题的解决方案都会导致另一个问题 如果我对用户模型进行更改 例如 通过在 AspNetUsers 表中添加邮政编码属性和匹配
  • 加载密钥“(stdin)”时出错:格式无效 Gitlab CI

    这是我关于 gitlab ci 的 ssh 的 yaml 文件的一部分 eval ssh agent s echo SSH PRIVATE KEY tr d r ssh add gt dev null mkdir p ssh chmod 7
  • 使用 Python 将 XML 文档插入现有 XML

    给定这些 XML 文档 文件1
  • ASP.NET MVC 4.0 控制器和 MEF,如何将这两者结合在一起?

    我正在尝试使用 MEF 创建 ASP NET MVC 模块 虽然到目前为止我在不使用 MVC 的情况下使用 MEF 没有任何问题 但在导出控制器时我遇到了一些困难 我用这种方法作为例子http kennytordeur blogspot d
  • 如何快速识别 Snakemake 中的规则是否需要输入函数

    我正在关注其文档页面上的 Snakemake 教程 并且确实陷入了输入函数的概念https snakemake readthedocs io en stable tutorial advanced html step 3 input fun
  • 未定义符号:_ZdlPvm

    我在用阿波罗咖啡 https github com Russell91 apollocaffe and 重新检查 https github com Russell91 ReInspect Apollocaffe在 c 库中并且Reinspe
  • Ruby:反转哈希以保留非唯一值

    我有一个看起来像这样的哈希 a gt 1 2 3 b gt 4 5 6 c gt 3 4 5 d gt 7 2 3 我想要做的是使用包含它的所有键的数组对所有现有值进行哈希 例如把上面的变成这样 1 gt a 2 gt a d 3 gt a
  • 您可以从 iPhone 应用程序下载 PDF 格式的内容吗

    是否可以将 iPhone 应用程序中的特定屏幕下载为 PDF 格式 我检查了 iphone 开发者门户和很多其他地方 但找不到答案 我想做的就是单击一个按钮 然后将该屏幕下载为 pdf 并将其存储在某个位置 这可能吗 如果是这样 您会将其存
  • 您对 iAd 和 adSense 有何建议 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑在我的应用程序中添加一个添加项 在 iAd 和 adSense 之间 您会向我推荐哪种广告计划
  • 使用未记录的“Application.Trim”并了解 VBA 智能感知建议

    当我用谷歌搜索时Trim 我发现它是一个Excel函数 也是一个VBA函数 在这两种情况下的 VBA 中 它只能与一个单元格一起使用 并且需要对多个单元格的范围进行循环 但是 我发现一些网页说明了使用Application Trim在没有循
  • 如何从java代码运行gradle任务?

    我需要从 java 方法将 gradle eclipse 任务运行到外部 gradle 项目 是否可以使用 Gradle Tooling API 来完成此操作 The 摇篮论坛 https discuss gradle org t exec
  • 如何同时使用 Mercurial 和 svn

    工作中的 SVN 存储库只能在内部访问 至少对于作为承包商的我来说 不工作的时候 我想使用HG 然后第二天与SVN同步 是否建议同时使用两者 有什么问题应该注意吗 The 使用 Subversion https www mercurial
  • 找不到记录器的处理程序

    我是Python新手 我正在尝试登录 python 我遇到了找不到记录器的处理程序尝试通过记录器实例打印一些警告时出错 下面是我尝试过的代码 import logging logger logging getLogger logger lo
  • 获取 UICollectionView 中 Scroll 的总高度?

    我有一个UICollectionView我想在加载内容时调整大小 高度 这个想法是高度应该扩大 以便所有 UICollectionView 单元格都可见 我想知道是否可以获得 内容 大小或滚动高度 Thanks CGFloat height
  • Android Gradle 1.1 - 添加对另一个项目测试的测试依赖项

    我有2个模块 A and B A是一个独立的模块 它的测试本身运行得很好 B是一个依赖模块 它的测试需要某个文件A的测试文件夹 一个测试文件位于B延伸一英寸A 以下是我认为的相关部分B s build gradle android sour
  • 抽象类的析构函数应该是纯虚拟的吗?

    我认为单独虚拟通常就足够了 除了强制派生类实现自己的析构函数之外 是否还有另一个原因使其成为纯虚拟的 我的意思是 如果你在类的构造函数中分配了一些东西 你应该实现你自己的析构函数 无论你的类是否是派生的 正如我已经知道的那样 这不算是答案
  • 如何导出架构并将其导入到 PL\SQL Developer 中的另一个架构

    我正在使用 AllroundAutomations 的 PL SQL Developer 我的任务是将名为 EN 的模式导入到另一个名为 E9 的模式 现在不存在 我设法使用以下方法转储了一个方案Tools gt Export User O
  • 使用 ASP.NET 模拟读取远程文件

    我想阅读远程服务器上存储的 PDF 我已获得具有读取访问权限的用户名 密码 我正在使用此 url 中给出的 ASP NET 模拟https support microsoft com kb 306158 https support micr