2016-11-15 67 views
2

我在Web應用程序中使用ASP.Net Identity 2.2,它工作得很好。ASP.Net Identity 2.0無人蔘與登錄

我想要做的是有一個後臺服務訪問Web應用程序,以生成一些頁面的縮略圖和/或PDF。此服務最終可能會在w3wp.exe進程中運行,並且會由用戶發出的某些Web請求觸發,例如,用戶改變一些設置並且觸發後臺服務以重新生成縮略圖。

問題是允許後臺服務訪問頁面而不打開其他人可以用來訪問頁面的後門。目前我的代碼可以從Web請求中複製認證Cookie,並使用它們請求頁面並生成縮略圖,但是我需要能夠在沒有任何現有連接的情況下複製Cookie。它需要能夠獲得自己的cookie。

我用來生成PDF /縮略圖的庫通過向Web服務器發出正常的Web請求並使用無頭瀏覽器來工作。我需要瀏覽網頁服務器,因爲頁面包含大量的javascript和ajax,因此靜態頁面很難生成。

理想情況下,它應該使用網絡上沒有人可以登錄的「系統」用戶。

我不想以可以快速解碼的形式(所有密碼都在數據庫中散列)存儲用戶的密碼。

有沒有人有任何想法如何做到這一點?

我的想法是,如果有一種可靠的方法來識別請求來自縮略圖服務,那麼服務器可以調用signin()函數而不需要密碼,但這本身當然是一個難題因爲我們希望防止在服務器上運行Web瀏覽器的人員繞過安全措施。我不是在想也許是一個共享(一次性使用)的祕密,但不知道這是否可以安全地完成。

+0

您可以爲後臺服務創建另一個用戶併爲其設置角色,如BackgroundServiceApp角色。比你寫api只有這個角色可以訪問,然後你的服務使用這個userAccount登錄和訪問它自己的應用程序api,它可以獲取用戶信息。如果您使用的是Azure,則可以查看https://msdn.microsoft.com/en-us/library/azure/dn798668.aspx,也可以使用Azure隊列或Amazon Simple Queue。 – Miguel

+0

由於我們試圖生成與用戶在其屏幕上看到的內容相同的縮略圖/ PDF,所以單獨的API不是我們想要採用的路線,因此服務訪問與用戶相同的頁面是有意義的,因此減少工作重複,即在流水線的末端增加一個額外的步驟,而不是讓兩個不同的流水線訪問相同的數據。 – Mog0

+0

@ Mog0現在,一種常見的方法是首先構建一個API,然後讓您的UI和任何其他自動化服務使用相同的API訪問數據。這樣你就可以避免你剛纔描述的重複問題。如果你已經構建了你的用戶界面,顯然不會有太大幫助,但只是想我會提到它的未來。 – ADyson

回答

0

你可以讓服務運行與您的Web服務的一個特定的用戶,然後讓用戶訪問您的網站的特定資源,添加到您的web.config是這樣的:

<location path="yourdomain/yourresource"> 
    <system.web> 
    <authorization> 
     <allow users="domainname\user" /> 
     <deny users="*" /> 
    </authorization> 
    </system.web> 
</location> 

在這你不必創建一個沒有商業價值的假用戶,也不需要在你的服務中硬編碼或配置用戶名和密碼。

+0

有趣的想法,但我們的許多客戶需要在其IIS設置中禁用Windows集成身份驗證,所以我不認爲這會在這些情況下工作,即Web應用程序不會知道請求來自的Windows用戶。 – Mog0

+0

因此,我認爲你應該考慮在你的服務中配置或硬編碼用戶和密碼,因爲在某種方式或其他你的服務將不得不對你的web應用程序進行認證 – user449689

+0

@ Mog0另一個想法可能是[這個](http:// serverfault.com/questions/392606/iis-windows-authentication-except-for-local-machine);你可以有一個需要認證的網站,另一個不需要它的網站(有IP限制),只能通過你的服務訪問。但我不會那麼誠實。 – user449689