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

Nei*_*ens 5 oauth hmac asp.net-web-api owin

好的,我有一个用于/ 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"
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

我跟随了Taiseer Joudeh的这些例子

使用ASP.NET Web API 2,Owin和Identity Secure ASP.NET Web API使用API​​密钥身份验证进行基于令牌的身份验证 - HMAC身份验证

Nei*_*ens 0

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

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

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