2012-03-03 52 views
0

我正在編寫一個MVC 3應用程序,它不使用使用實體框架訪問數據庫的經典方法。相反,我有另一個應用程序組合WCF服務,用於管理數據庫訪問。現在我想在我的MVC應用程序中使用這些服務作爲數據庫訪問。這部分很簡單。在這種情況下,管理認證和授權變得越來越困難。ASP.NET MVC 3與服務客戶端作爲數據庫訪問層

對於身份驗證和授權,我創建了自定義成員資格和角色提供程序。我已經實施了必要的方法,但在這裏我遇到了這個問題。我的服務需要用戶名和密碼才能獲取用戶角色列表。

我在想如何存儲用戶在登錄時提供的用戶名和密碼,在我的應用程序的支持位置,以確保它是保存,並有可用性在我的角色提供程序中使用它?

會話是否正確?如果是這樣,我如何在角色提供者中訪問用戶的會話?

回答

1

你不應該使用密碼,而應該使用密碼哈希值(當然是正確地醃製)。所以,現在您可以將用戶名和密碼散列傳遞給您的角色提供者,而角色提供者又會將其傳遞給您的wcf,從而授予或不授予必要的角色。

更新

的isUserInRole方法看起來應該像這樣:

public class WcfRoleProvider: RoleProvider 
{ 
    public bool IsUserInRole(string username, roleName) 
    { 
     bool result = false; 
     using(WcfRoleService roleService = new WcfRoleService()) 
     { 
      result = roleService.IsUserInRole(username, roleName); 
     } 

     return result; 
    } 
} 
+0

我使用的密碼哈希在WCF服務的最後一個級別。但是這並不能解決我在MVC應用程序中存儲信用的問題。 – domderen 2012-03-03 12:17:11

+0

@Tromax你爲什麼要存儲它們?每當用戶通過auth cookie發出請求時,它們都會被傳遞。 – 2012-03-03 12:20:04

+0

無論如何,在你的IsUserInRole方法中,你只有userName和roleName作爲參數,這意味着你不需要在這裏設計一個用戶的密碼哈希。因爲您已經知道您已經認證了該用戶,而您現在主要關心的是該用戶擁有哪些角色。 – 2012-03-03 12:22:45