2014-01-07 13 views
2

我們有2個應用程序,一個在Nodejs中,另一個在aspx中。
登錄頁面在Nodejs中。我需要的是創建一個會話,並從登錄頁面在aspx應用程序中對我的用戶進行身份驗證,以便以後在aspx應用程序中導航。

作爲一個網頁開發noob,我不知道從哪裏開始或搜索什麼。

預先感謝在aspx應用程序中預先驗證用戶

+0

@Dororzo這不完全是真實的,它不一定很容易或必要這樣做。如果你的應用程序位於同一個域中,並且你在兩個地方都可以訪問會話存儲,那麼這是可能的。如果您是通過應用程序之間的某個版本的OAuth執行此操作,也是可以的。哈摩,你爲什麼需要這樣做?爲什麼不通過aspx應用程序登錄,如果你在那裏做大多數導航? – Paul

+0

@保羅,但如果你說有可能告訴我們如何。不會比改變原來的問題更容易:)? – Dalorzo

+0

@Dororzo,因爲正如我所說這不容易,所以如果沒有必要解決他的問題,我不想花時間/精力去做。 – Paul

回答

3

因此,有幾種方法我能想到的要做到這一點,取決於你的當前意向爲做你正在做什麼應用程序和理由。我會嘗試在這裏列出一些贊成和反對的內容。我會再次說,沒有什麼是我認爲新的Web開發人員容易的事情;團隊中是否有其他人擁有一種或兩種技術的經驗?

1)可能是最簡單的選擇,如果你能做到的話,那就是讓Node.js進程成爲網關。 ASP.NET應用程序根本不需要對用戶進行身份驗證,Node.js應用程序充當ASP.NET應用程序的全功能反向代理。如果你可以支持它,這可以很好地工作,並且可以通過讓Node.js應用程序登錄到ASP.Net應用程序(通過你想要的任何方法;基本身份驗證,表單登錄等等)來保護它。如果您需要ASP.Net應用程序來了解當前上下文中的用戶是什麼,那麼您可以將所需的任何信息推送到請求標頭中(例如,如果它們共享相同的數據庫,那麼您可以將它放入標識的節點應用程序認證的用戶)。如果您希望ASP.NET應用程序可以通過節點應用程序自行訪問,那麼節點應用程序將成爲衆多用戶中的一員,而且asp.net應用程序需要HTTP模塊來規範用戶信息是否來自會話或從Http標頭。最簡單的方法是讓Http Module檢查當前用戶是否具有特定角色(例如NodeApp)並已登錄,然後將用戶信息從HttpContext複製到新的Session變量中(即應用程序的其餘部分使用),或者在數據庫中查找代理用戶並執行相同的操作。基本上,應用程序的其他部分永遠不會相信HttpContext的當前用戶在此時做出決定。

Pro's:相當簡單的架構,並不取決於每個應用程序所在的域。這兩個應用程序都需要訪問用戶數據庫才能正常工作。

Con's:如果由於某種原因,應用程序無法訪問相同的用戶數據庫,它就不是那麼好。做代理有一些開銷(不多,但仍然存在)。無論你是在談論「真實」用戶還是「節點」用戶,你都必須保持直線,這有點讓人費解。

2)OAuth(或者OpenID)是最符合標準的選項。在這種情況下,您可以將Node.js應用程序設置爲OAuth提供程序,並讓ASP.NET應用程序成爲OAuth使用者。然後用戶可以使用他們的節點用戶名和密碼進行登錄,並讓Node應用程序通過現有的身份驗證模塊將身份驗證令牌傳遞給ASP.NET應用程序。

Pro's:在ASP.NET端編寫的代碼少於上述示例,符合標準。如果您稍後想要,可以切換(或添加)OAuth提供程序。

Con's:對用戶更爲間接一點(在應用程序之間重定向)。這可能會最小化,但您需要非常熟悉OAuth協議。

3)會話共享(如果別人正在對你進行會話,則認爲會話劫持...)。如果您位於同一個域中,那麼Node.js應用程序可以簡單地寫出ASP.NET會話和auth cookie等ASP.NET。我說'簡單',但是有很多關於ASP.NET機器的細節,你需要理解它是正確的。 http://support.microsoft.com/kb/910443。主要的一點是,你需要將你的ASP.NET會話存儲放在一個數據庫中,然後讓Node.js管理這些元素的添加和刪除,以便ASP.NET在查看會話時可以訪問& auth cookie根據給定的請求,它可以在預期發現它們的地方找到它們,然後ASP.NET進程會在那裏找到它們並採取相應的行動。

Pro's:使用已經到位的ASP.NEt機器 Con's:可能非常脆弱,所有事情都考慮在內。您的node.js應用程序需要訪問ASP.NEt應用程序將用於解密會話內容的machineKey。您需要確保您使用的是相同的加密算法,並且這兩個應用程序都將耦合到同一個會話存儲區。

4)在ASP.NET中展示自己的成員資格提供程序,向Node應用程序發出Forms Auth票據。這有點類似於1和3的混合。在這個選項中,Node應用程序在認證用戶之後,會向ASP.Net服務器上的Login端點發送另一個請求,並提供憑證來標識它自己,無論你想要(例如以某種方式加密的共享密鑰)。它也可以提供你想要的任何用戶細節。然後,您可以在您的ASP.NET代碼中手動調用Forms Authentication api來爲最終用戶創建一張票(http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.aspx),即無需自行計算;會話商店可以在任何地方。對Node.js應用程序的響應將把票據數據包含在auth cookie中,因此您的Node.js應用程序可以將該數據傳回給您的用戶,以便他們下次向ASP.nEt應用程序發出請求時,他們將有一個由asp.net生成的有效auth cookie。

Pro's:從ASP.NET透視圖中比#3更加靈活,並且比#1更少用戶。 Con's:仍需要兩個應用程序在同一個域上,但仍需要兩者之間的大量集成。如果你搞砸了你的會員提供商,你可能會意外地在你的安全漏洞中造成一個漏洞總體而言,我認爲OAuth解決方案是最好的解決方案,但這些都是我能想到的方法。

+0

謝謝你現在,我將研究不同的可能性,並回來反饋 – Jeanseb

+0

解決方案4,因爲應用程序的其他部分使用這種技術。再次感謝你 – Jeanseb