【问题标题】:ASP.NET Web API / HMAC Authentication, how to authorize on user's behalf?ASP.NET Web API / HMAC Authentication,如何代表用户授权?
【发布时间】:2013-06-26 01:00:54
【问题描述】:

我正在阅读这篇文章http://rc3.org/2011/12/02/using-hmac-to-authenticate-web-service-requests/,并且我理解 HMAC 的工作原理。

问题在于 HMAC 似乎只对第三方(中继方)进行身份验证。如果第三方想要通过我的系统的用户和他/她的密码来提取用户的特定数据怎么办?我不想使用 OAuth 1.0 或 2.0,因为它们存在各种问题。在我看来,我也需要对用户进行身份验证,而不仅仅是授权?

例如,Evernote 移动应用程序要求我输入用户名/密码,我确信它在后台调用某种 Web API。它没有使用 OAuth 2.0 对吗?因为我没有看到自己重定向到提供者站点来“授权”。在这种情况下,我的用户名/密码是如何传递给后端服务的?

[编辑]

经过一番思考,我假设 SSL 是解决方案?拥有 SSL 后,您可以将用户名/密码以纯文本形式传递给我的 web api,然后我会做任何事情来验证第三方 PLUS 验证用户并用用户数据响应?

在那种情况下,缺点是我必须信任第三方?所以他们不存储我用户的用户名+密码,对吗?

【问题讨论】:

    标签: asp.net-web-api hmacsha1


    【解决方案1】:

    首先,仅仅因为您没有看到重定向,并不意味着没有使用 OAuth。我并不是说 Evernote 使用 OAuth。我不知道他们的架构,但是作为 OAuth 2.0 一部分的资源所有者密码凭据授予适用于第一方应用程序,并且它不会重定向。

    其次,如果您想确保您的用户不会与使用您的 Web API 的第三方应用共享他们的凭据,那么 OAuth 2.0 是一个不错的选择,并且不确定您为什么不想使用 OAuth。您也可以在 WIF 的帮助下尝试 WS-Federation,尽管它是 SOAP-ish。最后一个选项将提出您自己的基于重定向的机制,通过该机制确保您的用户在您的网页中提交他们的凭据,但这是非常危险的,不推荐。为什么要重新发明轮子?除此之外,您必须只信任第三方。

    【讨论】:

    • @Bardri。谢谢。我刚刚尝试再次阅读 OAuth2.0,您能否阐明 OAuth2.0 如何在不访问提供者站点的情况下获取资源所有者的凭据?有点困惑。另外,我对 OAuth 很关心,因为我看了这两篇文章 homakov.blogspot.com/2013/03/oauth1-oauth2-oauth.html(前段时间碰巧破解了 facebook oAuth2.0)和 hueniverse.com/2012/07/oauth-2-0-and-the-road-to-hell(碰巧是 OAuth 的创建者)
    • 刚刚看到 Twitter 的 XAuth 实现,它跳过了请求令牌和授权。 dev.twitter.com/docs/oauth/xauth 直接访问AccessToken。虽然,我必须高度信任第三方应用程序......像Twitter一样,第三方需要专门请求这样的许可,所以它并不是说OAuth解决了问题......加上上面提到的所有其他因素两个链接
    • 仅供参考。我并不是说 OAuth2.0 不好,但我不相信那里的实现。我的意思是 facebook 实现(由他们的专家工程师支持,仍然经常遇到问题,我不确定是否有可以使用的实现)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 2012-03-20
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多