2012-02-28 42 views
6

在设计和学习ASP.NET Web API时,我遇到了一些挑战,希望能够得到一些帮助和讨论。ASP.NET Web API - 从查询字符串值和API安全性授权

受此excellent post的启发,关于在没有OAuth的情况下设计安全REST API我想知道如何最好地验证各种令牌和我打算请求的信息。

小结是我将要求(在查询字符串)以下信息..

  • 用户ID
  • API密钥
  • 时间戳
  • 一个签名中的散列基于秘密密钥用户已经发出并与请求值一起散列

我的问题/想知道的是这样的:

如果这是一个很好的方法,那么使用ASP.NET Web API实现这一点的最佳方法是什么?

我目前正在考虑使用自定义属性,我可以标记我的方法,类型的Authorize属性,从查询字符串或一些POCO类型的对象包含所有的值,我可以使用将所有授权类型代码保存在一个地方。

有没有人有任何经验或想法呢?

谢谢:)

+0

您可以在全局Begin_Request处理程序或全局Authenticate_Request处理程序中调用您的授权码。 – 2012-02-28 21:42:36

回答

5

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

我已通过扩展System.Web.Http.Filters.AuthorizationFilterAttribute来完成授权。扩展后,所有授权细节都由您决定,您有多种方法可供选择。

+0

你有没有例子? – daanl 2012-03-16 07:16:06

+0

当然。我的BasicAuthorizationFilterAttribute扩展了System.Web.Http.Filters.AuthorizationFilterAttribute,然后重写了OnAuthorization方法。由于OnAuthorization方法接受HttpActionContext作为其参数。这个对象允许我访问请求消息并从那里获取所需的数据(在这种情况下是HttpRequestHeaders.Authorization头)。从那里开始,值必须被检查。如果它有效,该方法返回。否则,该方法分配actionContext.Response对象,并返回“不成功的授权”响应。 – 2012-03-16 08:00:58