我在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瀏覽器的人員繞過安全措施。我不是在想也許是一個共享(一次性使用)的祕密,但不知道這是否可以安全地完成。
您可以爲後臺服務創建另一個用戶併爲其設置角色,如BackgroundServiceApp角色。比你寫api只有這個角色可以訪問,然後你的服務使用這個userAccount登錄和訪問它自己的應用程序api,它可以獲取用戶信息。如果您使用的是Azure,則可以查看https://msdn.microsoft.com/en-us/library/azure/dn798668.aspx,也可以使用Azure隊列或Amazon Simple Queue。 – Miguel
由於我們試圖生成與用戶在其屏幕上看到的內容相同的縮略圖/ PDF,所以單獨的API不是我們想要採用的路線,因此服務訪問與用戶相同的頁面是有意義的,因此減少工作重複,即在流水線的末端增加一個額外的步驟,而不是讓兩個不同的流水線訪問相同的數據。 – Mog0
@ Mog0現在,一種常見的方法是首先構建一個API,然後讓您的UI和任何其他自動化服務使用相同的API訪問數據。這樣你就可以避免你剛纔描述的重複問題。如果你已經構建了你的用戶界面,顯然不會有太大幫助,但只是想我會提到它的未來。 – ADyson