2011-12-02 49 views
2

我目前有一個服務,通過https保護TransportWithMessageCredential。這個作品太棒了!我現在需要爲此服務的某些操作添加一些粒度。WCF中的用戶授權與BasicHttpBinding與TransportWithMessageCredential

可以說我有這種方法public IEnumerable<Project> GetProjects()現在我需要添加一個額外的方法,將投影限制到當前用戶有權訪問的項目。

是使用這樣的代碼:

var uid = System 
     .ServiceModel 
     .OperationContext 
     .Current 
     .IncomingMessageProperties 
     .Security 
     .ServiceSecurityContext 
     .PrimaryIdentity; 
var returnProjects = context.Projects.Where(p => p.ProjectManager.Equals(uid.Name)); 

要離開我容易受到任何形式的攻擊?

我認爲這應該沒問題,因爲WCF首先會打我的自定義UserNamePasswordValidator並「驗證」用戶,那麼我上面的代碼將「授權」他們只得到他們的項目。這裏我的想法有缺陷嗎?

回答

2

不,這是完全有效的想法。這正是我們實現用戶特定安全性的方式(我們使用FormsAuthentication識別用戶的次要例外)。

在處理每個請求之前,我們總是檢查用戶,如果有任何可疑的請求,我們會拋出異常。