【问题标题】:Using multiple Authorization schemes (HMAC and OATH)使用多种授权方案(HMAC 和 OATH)
【发布时间】:2015-09-19 05:55:28
【问题描述】:

好的,所以我有一个用于 /token 请求并将承载令牌返回给客户端的 WebAPI Auth 服务,我已将 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 Key 为每个请求生成 Hmac SHA256 签名。

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

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

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

现在我知道你只能有一个授权标头,所以我的困惑是如何在不破坏 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

【问题讨论】:

  • 我面临着类似的情况。我正在考虑仅使用自定义标头而不是尝试使两个授权标头工作。你有更好的办法吗?

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


【解决方案1】:

这已经很久没有答案了,因为我已经解决了我最初的问题,我想我应该在这里发布解决方案,以便其他人可以使用它。

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

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

【讨论】:

  • Neil,当使用 Authorization 以外的标头时,请务必注意 RFC 7235(第 5.1.2 节)中有关缓存控制的注意事项。
猜你喜欢
  • 1970-01-01
  • 2011-04-15
  • 2011-08-25
  • 1970-01-01
  • 2013-01-06
  • 2011-04-27
  • 2018-12-13
  • 2019-02-24
  • 2015-11-15
相关资源
最近更新 更多