C# Web API扩展安全性

C# Web API扩展安全性,c#,asp.net,security,asp.net-web-api,C#,Asp.net,Security,Asp.net Web Api,我有一个web应用程序,它实现了最新的web API作为restful服务器,用于构建在.NET 4.5上的基于javascript/ajax的web应用程序。我正在使用表单身份验证及其工作方式来保护web api以及应用程序的其余部分 我想为Web API添加另一层安全性,以防止用户在手动请求API时使用另一个用户guid。他们必须在另一个登录用户的浏览器中查看源代码,才能从隐藏的输入中获取该用户的guid。然后,他们可能会使用该guid通过自己的身份验证会话访问其他用户的数据。当然,这个坏人

我有一个web应用程序,它实现了最新的web API作为restful服务器,用于构建在.NET 4.5上的基于javascript/ajax的web应用程序。我正在使用表单身份验证及其工作方式来保护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,而不是依赖于从客户端发送的内容……但我不确定这是否适用于我的所有情况……因为我的应用程序还很年轻


谢谢你抽出时间

我目前正在编写一个使用承载身份验证的API(请参阅Microsoft文档,因为这里有太多的细节要发布)

我正在使用的一件事是声明,我正在设置的声明之一是构成用户标识一部分的用户标识。当有人使用API进行身份验证时,也会设置声明(从令牌读取),并且可以从用户上下文访问声明,就像您当前访问名称时所做的那样

通过这种方式,您不需要将Guid存储在隐藏字段中