我有一个Web应用程序已经实现了最新的Web API作为基于JavaScript/Ajax的基于.NET 4.5构建的Web应用程序的宁静服务器。我正在使用表单身份验证和它的工作,因为它应该保证网络API以及应用程序的其他部分。Web API扩展安全
我想向Web API添加另一层安全性,以防止用户在手动向API请求中使用其他用户guid。他们必须在另一个登录用户的浏览器中查看源代码,才能从隐藏的输入中获取该用户的guid。然后,他们可能会使用该GUID通过他们自己的认证会话访问其他用户的数据。当然,这个坏人必须在他们自己的帐户下进行身份验证才能发挥作用。
我在做的是传递用户GUID每个API请求,如果该GUID匹配HttpContext.Current.User.Identity.Name然后允许请求...否则抛出一个未经授权的异常,并处理它相应的客户。但是接下来我的所有处理方法都变得有些肮脏了,如下所示...在大多数情况下,这将不得不在每个GET,POST,PUT等中以及其他对象中。
public Community Get(string userGuid)
{
if (HttpContext.Current.User.Identity.Name == userGuid)
return myDataHandler.getUserData();
else
throw new HttpResponseException(HttpStatusCode.Unauthorized);
}
我可以做这个工作,但它似乎有点太多的开销。我已经浏览了许多关于web api安全性的文章和文章,但没有涉及这种潜在的情况。验证每个请求的最佳方法是实际请求关于用户登录的信息,而不必执行上面的操作。可能使用这个想法,但为每个API请求全局执行,而不是在每种方法中都进行测试?解决这个问题的另一种方法是为每个请求使用HttpContext.Current.User.Identity.Name,而不是依赖从客户端发送的内容......但我不确定这将适用于所有情况...... as我的申请还很年轻。
谢谢你的时间!