2011-12-02 64 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识别用户的次要例外)。

在处理每个请求之前,我们总是检查用户,如果有任何可疑的请求,我们会抛出异常。