2014-09-02 88 views
0

首先,我知道這屬於「不推薦實踐」類別,但我有要求通過ASP.Net網站將Word文檔轉換爲PDF,並且我一直在使用Word Interop,因爲它是免費的,易於實現,而且Word已經安裝在服務器上。使用Interop將Word轉換爲PDF需要管理員權限

當我一直在測試,它是爲我工作,但發佈後用戶報告「未經授權的訪問」的錯誤。我有服務器的管理權限,我發現在服務器上添加用戶作爲管理員可以工作,但我不想授予每個用戶的管理員權限。

因此,有很多事情需要發生,有沒有其他替代方案,免費,用於將Word文檔轉換爲PDF的庫,我可以使用?是否有一種簡單的方式讓我的用戶訪問Interop庫而不授予管理員權限?有沒有一種方法可以模擬Web應用程序這部分的管理員用戶,因爲應用程序需要Windows身份驗證?

還有什麼我沒有想過的東西可以讓我受益嗎?

+0

免費被高估了。如果您購買價值1000美元的解決方案,但可以節省數天的研究,編碼,調試和支持工作,這非常值得花費。 – 2014-09-02 14:13:17

+0

不幸的是我不在財務決策部門,所以自由是唯一不幸的方法。 – anothershrubery 2014-09-02 14:32:38

+0

或者你可以向決策者解釋這一點。 – 2014-09-02 15:01:02

回答

2

您可以使用模擬來以不同的用戶身份運行代碼。在CodeProject上有一個很好的模擬類,http://www.codeproject.com/Articles/10090/A-small-C-Class-for-impersonating-a-User

只需在機器上創建一個新的管理員帳戶,即可進行自己想要的操作,將憑證存儲在應用程序設置的web.config中(如果您想要使用rijandael並使用代碼進行解密,請將其加密)

但從長期儲存總之,你使用它像這樣,

using (new Impersonator("myUsername", "myDomainname", "myPassword")) 
{ 
    //This code is running elevated as the specified user 
} 
//This code is reverted back to the previous user. 

其實,我寫我自己的web.config的ConfigurationElement存儲憑據。它看起來像這樣,

public class CredentialConfigurationElement : ConfigurationElement 
{ 
    #region Properties 
    [ConfigurationProperty("userName", DefaultValue="", IsRequired=true)] 
    public string UserName 
    { 
     get { return (string)this["userName"];} 
     set { this["userName"] = value; } 
    } 

    [ConfigurationProperty("password", DefaultValue = "", IsRequired = true)] 
    public string Password 
    { 
     get { return (string)this["password"]; } 
     set { this["password"] = value; } 
    } 
    #endregion 

    #region Explicit Operators 
    public static implicit operator NetworkCredential(CredentialConfigurationElement value) 
    { 
     return new NetworkCredential(value.UserName, value.Password); 
    } 
    public static implicit operator CredentialConfigurationElement(NetworkCredential value) 
    { 
     return new CredentialConfigurationElement() { UserName = value.UserName, Password = value.Password }; 
    } 
    #endregion 
} 

但是,要使用它,您需要創建一個Custom ConfigurationSection,這是一個從ConfigurationSection繼承的類,並將CredentialConfigurationElement作爲屬性公開。

E.g.您可以創建一個名爲CodeImpersonatorSection的新節:ConfigurationSection

並在此處將CredentialConfigurationElement公開爲名爲ImpersonationCredentials的屬性。

然後使用(CodeImpersonatorSection)WebConfigurationManager.GetSection(「/ yoursectionnamehere」);獲取配置實例。

有選擇地修改冒領類自動做到這一點,並改變它有一個靜態方法類似

Impersonator.RunUnderImpersonation(p => { 
    //This code is impersonating the configured user. 
}); 
+0

我用這個相同的代碼來模擬一個沒有**擁有管理權限的用戶,所以我可以嘗試單步執行代碼,但是它仍然工作,所以我認爲'Impersonator'代碼沒有工作。使用它來模仿管理員似乎按預期工作,這很好。乾杯。 – anothershrubery 2014-09-02 14:51:02

+0

您是如何調試代碼,在IIS中連接到w3wp.exe,還是使用f5和IIS Express? – 2014-09-02 14:53:07

+0

IIS Express,沒有嘗試附加到發佈的代碼。但它現在正在工作,所以很好。 – anothershrubery 2014-09-02 15:40:28

相關問題