Asp.net mvc 3 ASP.NET Web Api-通过查询字符串值和Api安全性进行授权

Asp.net mvc 3 ASP.NET Web Api-通过查询字符串值和Api安全性进行授权,asp.net-mvc-3,asp.net-web-api,Asp.net Mvc 3,Asp.net Web Api,在设计和学习ASP.NET Web API的过程中,我遇到了一些挑战,希望得到一些帮助和讨论 受此启发,我设计了一个没有OAuth的安全RESTAPI,我想知道如何最好地验证我想要的各种令牌和信息 简要总结是我将(在查询字符串中)询问以下信息 用户id api密钥 时间戳 一种基于用户已获得的密钥的签名散列,并与请求值一起散列 我的问题/疑问是: 如果这是一种合理的方法,那么使用ASP.NET Web API实现这一点的最佳方法是什么 我目前正在考虑使用一个自定义属性(我可以用它来标记我的方

在设计和学习ASP.NET Web API的过程中,我遇到了一些挑战,希望得到一些帮助和讨论

受此启发,我设计了一个没有OAuth的安全RESTAPI,我想知道如何最好地验证我想要的各种令牌和信息

简要总结是我将(在查询字符串中)询问以下信息

  • 用户id
  • api密钥
  • 时间戳
  • 一种基于用户已获得的密钥的签名散列,并与请求值一起散列
我的问题/疑问是:

如果这是一种合理的方法,那么使用ASP.NET Web API实现这一点的最佳方法是什么

我目前正在考虑使用一个自定义属性(我可以用它来标记我的方法)、一种从查询字符串中获取所需内容的Authorize属性,或者一个包含所有值的POCO类型对象,我可以使用它将所有授权类型代码保存在一个地方

有人对此有什么经验或想法吗


谢谢:)

目前,正如您可能已经看到的,Web API中使用了
AuthorizeAttribute
方法。我认为这是一个相当好的方法,因为我们可以将此属性放在需要授权的单个项目上


我通过扩展
System.Web.Http.Filters.AuthorizationFilterAttribute
完成了授权。扩展后,所有授权详细信息都由您决定,您有很多方法可供选择。

您可能可以在全局Begin_请求处理程序或全局Authenticate_请求处理程序中调用身份验证代码。确定。我的BasicAuthorizationFilterAttribute扩展System.Web.Http.Filters.AuthorizationFilterAttribute,然后覆盖OnAuthorization方法。因为OnAuthorization方法接受HttpActionContext作为其参数。此对象允许我访问请求消息并从中获取所需数据(本例中为HttpRequestHeaders.Authorization标头)。此后,必须检查该值。如果有效,则该方法返回。否则,该方法将分配actionContext.Response对象,并返回“未成功授权”响应。