使Windows身份验证和WKHTMLToPDF发挥得很好

时间:2011-06-14 08:50:48

标签: asp.net pdf-generation windows-authentication ntlm wkhtmltopdf

我面临着从ASP.NET网站上的HTML页面生成PDF的任务。 (用户可以节省/打印的东西)

我发现WKHTMLToPDF很好地完成了这项工作:

Calling wkhtmltopdf to generate PDF from HTML

但是,我有一个问题。我们的网站是一个Intranet站点,使用Windows身份验证。我可以使用--username和--password将我的凭据传递给WKHTMLToPDF,并向我自己证明网页是按照您的希望生成的。

问题在于:如何为进入我们系统的每个不同用户做些什么?我可以想到一些可能/可能不起作用的可能解决方案,我希望有人可以给我一些意见/指导,因为我似乎已经结束了我的研究。

可能的解决方案:

  1. 在ASP.NET中是否有任何方法可以从用户凭据中提取用户名和密码以传入WKHTMLToPDF?我怀疑这个问题的答案是“没有,并且有明智的理由”
  2. 是否可以运行Process并通过Users凭据?我可以看到可以在进程中设置用户名/密码(虽然我不知道如何从凭证中传递这个,因为密码似乎没有公开)。也许还有另一种方法可以直接将凭证传递给Process?
  3. 我可以创建一个单独的PDFGenerator网站,该网站不使用Windows身份验证。然后,我可以将安全网站中的HTML / CSS /图像移植到共享目录,然后将用户重定向到PDFGenerator网站以实际从HTML生成PDF,而不必担心身份验证(并在PDF之后清理HTML等)生成)。
  4. 我怀疑3是我最终会坚持不懈的解决方案,但由于这实际上是处理身份验证问题的一个大解决方法,我非常愿意接受更好的建议或帮助1或2!

1 个答案:

答案 0 :(得分:2)

您可以在web.config中设置模拟:

http://msdn.microsoft.com/en-us/library/aa292118%28v=vs.71%29.aspx

这意味着执行的任何操作都以用户身份完成。这在某些情况下可能会导致问题。这意味着该站点使用该会话的用户凭据而不是应用程序池的标识运行,并且您必须通过环节来设置Web应用程序才能正常运行并且仍然是安全的。

您应该注意,在大多数正常配置下,您运行的任何内容都将采用应用池的凭据。您可以更改应用程序池的帐户。这可能允许您通过仅允许来自运行应用程序池的用户进行访问来锁定事物。

其他替代方案可能是使用另一个应用程序,而不是使用模拟的主应用程序。这可能比将整个应用转换为使用模拟更容易管理。 (我没有关于你项目的细节,所以很难在这里提出具体建议。)