2009-06-09 65 views
0

我有一個包含多個獨立組件的項目,所有組件都需要彼此交談。我現在試圖找到一種在每個組件之間共享權限系統的好方法。將權限添加到複雜系統

的3個主要組成部分是:

  1. 的ASP.Net Web應用程序
  2. 一個Silverlight應用程序(web應用服務)
  3. 一個窗口服務,這給提供了一些WCF web服務Silverlight應用程序。

服務器(1,3)都可以訪問同一個數據庫。每個組件之間的通信由WCF Web服務執行。

我需要確保從Windows服務(3)請求信息的用戶是具有正確訪問權限的用戶。 Silverlight應用程序(2)是請求應該來自哪裏。目前,沒有用戶信息可用於Windows服務(1),因爲它與Asp.Net應用程序(3)完全分離。我不想存儲和傳遞用戶名和密碼,並且用戶只需輸入一次憑據,這會在登錄ASP.Net應用程序(1)時發生。

什麼是讓用戶識別Windows服務(3)的好方法?

(我會後一可能性,我看到如下的回答。)

回答

0

一種可能性我看到的是繞過會話ID從ASP.Net應用程序的用戶標識。

當Asp.Net(1)提供Silverlight應用程序(2)時,它可以傳遞會話ID。然後,當Silverlight應用程序(2)向Windows服務(3)發出請求時,它可以將會話ID作爲參數傳遞。 Windows服務(3)可以使用由Asp.Net應用程序(1)公開的WCF服務來查詢給定會話ID的用戶標識。

這裏是否存在潛在的安全漏洞?在我看來,如果某人可以劫持sessionID,它將被暴露並劫持,無論它是否傳遞給Silverlight應用程序。

1

如果取決於我,我會使用來自ASP登錄的身份驗證信息(用戶)來傳遞。此對象會自動傳遞到所有ASP.NET網頁,因此無論何時您需要調用Windows服務時都可隨時使用該對象,並且您應該能夠輕鬆驗證權限。

+0

我已經考慮過了,但我認爲劫機者只是簡單地將用戶標識傳遞給Web服務並僞裝成用戶就太容易了。 它與會話ID類似,但會話ID偶爾會發生變化,而用戶ID將保持不變。 – grimus 2009-06-09 16:22:52

1

您可以保護Silverlight和ASP.NET之間使用ASP.NET應用程序服務的調用,從而將ASP.NET身份驗證機制公開給Silverlight。隨後,Silverlight應用程序將維護會話信息以便後續調用ASP.NET。在過去,我在ASP.NET應用程序中創建了WCF服務,並使用PrincipalPermission屬性(http://msdn.microsoft.com/en-us/library/ms731200.aspx)通過Silverlight中提供的登錄信息來保護WCF服務方法。這個場景完美地工作,並且不需要你創建自己的安全機制,比如傳遞會話ID或者表示用戶名的字符串(不推薦)。我認爲這種設置也適用於多臺服務器,但我不確定在Windows服務中託管WCF服務是否會影響安全性。可能有辦法在兩者之間啓用某種形式的模仿。絕對考慮ASP.NET應用服務以確保#1和#2的安全,並且如果您可以設法將您的WCF服務託管在IIS中,那麼它將滿足您的所有要求,並且只需很少的工作即可完成。