使用多种授权方案(HMAC和OATH)

时间:2015-07-01 21:34:15

标签: asp.net-web-api oauth owin hmac

好的,我有一个用于/ token请求的WebAPI Auth服务,并将Bearer令牌返回给客户端,我已经为属性添加了AppId和Api Key,所以我回来了

{
"access_token": "...",
"token_type": "bearer",
"expires_in": 86399,
"dm:appid": "1",
"dm:apikey": "...",
".issued": "Wed, 01 Jul 2015 20:46:45 GMT",
".expires": "Thu, 02 Jul 2015 20:46:45 GMT"
}

客户端应使用AppId和Api密钥为每个请求生成Hmac SHA256签名。

在我的控制器上,我使用了Authorize属性并创建了一个实现IAuthenticationFilter的HmacAuthentication属性

[RoutePrefix("api/account")]
[Authorize]
[HmacAuthentication]
public class AccountController : ApiController
{
    // rest of controller here
}

我遇到的问题是,对此控制器的任何请求都需要Authorization: Bearer ...标头,而HmacAuthentication属性也需要Authorization: amx标头。

现在我知道你只能拥有一个Authorization标头,所以我的quandry是如何在不破坏HTTP的情况下实现两个授权标头,是否有人使用OWIN OAuth和HMAC身份验证

我跟随了Taiseer Joudeh的这些例子

Token Based Authentication using ASP.NET Web API 2, Owin, and Identity Secure ASP.NET Web API using API Key Authentication – HMAC Authentication

1 个答案:

答案 0 :(得分:0)

这已经有很长一段时间没有答案了,因为我已经解决了原来的问题,我想我应该在这里发布解决方案,以便其他人可以使用它。

最后,解决方案是在评论中添加一个自定义标题,如@Glaucus。对于标准OAuth授权,我添加了Authorize标头属性。为了满足我对HMAC的需求,我只是在标题中添加了X-Authorize属性,并修改了我的代码以改为使用此标题。

现在我可以通过OAuth令牌和对请求实施HMAC授权来保护WebAPI服务