我有一个 Web 应用程序,它实现了最新的 Web API 作为基于 .NET 4.5 的主要基于 javascript/ajax 的 Web 应用程序的 restful 服务器。我正在使用表单身份验证及其工作,以保护 Web api 以及应用程序的其余部分。
我想为 Web API 添加另一层安全性,以防止用户在对 API 的手动请求中使用另一个用户 guid。他们必须在另一个登录用户的浏览器中查看源代码,才能从隐藏的输入中获取该用户的 guid。然后,他们可能会使用该 guid 通过他们自己的经过身份验证的会话来访问其他用户的数据。当然,这个坏人必须在他们自己的帐户下进行身份验证才能起作用。
我想做的是通过每个 api 请求传递用户 guid,如果该 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 而不是依赖于客户端发送的内容......但我不确定这是否适用于我的所有情况......因为我的申请还很年轻。
感谢您的时间!