我目前有一项服务,由TransportWithMessageCredential通过https保护。这工作太棒了!我现在需要为此服务的某些操作添加一些粒度。
让我说我有这个方法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
并“验证”用户,然后我上面的代码将“授权”他们只获得他们的项目。我的思想存在缺陷吗?
答案 0 :(得分:2)
不,这是完全有效的思考。这正是我们实现特定于用户的安全性的方式(我们使用FormsAuthentication来识别用户的一个小例外)。
在处理每个请求之前,我们总是检查用户,如果有任何可疑的请求,我们会抛出异常。