2012-03-03 44 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

相关问题