Web API OAuth Bearer Token 安全性

Posted

技术标签:

【中文标题】Web API OAuth Bearer Token 安全性【英文标题】:Web API OAuth Bearer Token security 【发布时间】:2014-12-03 13:14:25 【问题描述】:

我确定我在这里遗漏了一些东西,所以希望这里有人可以填补我的空缺。

我正在查看 .NET 4.5 Web API(我猜是版本 2?)中的 OAuth 2.0 实现,并且我已经实现了一个非常简单的演示,其中我有一个控制台应用程序调用一些基本操作。我从“/Token”端点获得一个令牌,并将其作为“承载”令牌传递回授权标头中。一切正常。

但是,我缺少的是它如何不受 MITM、重放或其他攻击的影响?如果我只是简单地传递凭证(以令牌的形式),并且它们始终是相同的凭证,那么围绕它的安全性是什么,以确保没有人简单地窃取我的令牌并冒充我?

诚然,我也在使用 SSL,但这是围绕此构建的唯一安全性吗?也许我也应该使用某种随机数或时间戳检查?如果是这样,如何在 Web API 中做到这一点?

无论如何,我相信这里有一个非常简单的解释,所以我会很感激这些信息。

另外请注意,我在两个 Visual Studio 2013 Web 应用程序项目中运行这两个服务器,这些项目位于不同端口上运行的不同 VS 2013 解决方案中。我不确定这是否重要,但我想我会提到它。

【问题讨论】:

我对 *** 中的这种编辑概念感到非常沮丧。我看不出这个编辑对问题的精神有什么影响。我认为很明显这是一个概念性问题,我如何运行我的设置不会影响答案。我只用它作为我的问题来自哪里的上下文。为什么不直接将其添加为评论,或者在说出我的话之前问一个问题,如果这是我的意思?我也认为在接受答案后编辑问题是没有意义的。此编辑可能会更改给出的答案。挫折感比比皆是。 有时人们喜欢玩给他们的玩具 :) 另外,根据这篇文章,这是提高您声誉的方法之一 >> meta.stackexchange.com/questions/17204/… 【参考方案1】:

OAuth 2.0 不记名令牌的安全性仅依赖于 SSL/TLS,没有内部保护或不记名令牌。如果你有令牌,你就是所有者。在许多使用 OAuth 2.0 中继的 API 提供商中,他们用粗体表示客户端开发人员应安全存储并在传输过程中保护令牌。

您可以阅读 Eran Hammer 的这篇有趣的帖子,他曾与标准化 OAuth 2.0 的社区合作,但我相信他是因为意见冲突而离开了他们。查看他的帖子OAuth Bearer Tokens are a Terrible Idea,您可以阅读此post too。

但最终它正在成为标准方式,您必须通过 https 传输并安全存储。

【讨论】:

感谢泰泽尔。我以为我在某个地方读过很多东西(可能是 Eran Hammer 的那篇文章),但我觉得很奇怪,因为 HMAC 在签名、使用随机数、时间戳等方面遇到了很多麻烦。你知道吗?是否有任何其他最佳实践可用于使此过程更加安全? @ChrisC 签名严格用于确保令牌是由您的服务器颁发的。由于有效负载本身只是 base64,因此您有两种选择。要么您永远不会将敏感数据存储在令牌中,要么加密有效负载。这篇文章很有趣:auth0.com/blog/2014/01/27/… 感谢 Taiseer Joudeh,我对这个带有不记名令牌的 Oauth2.0 有很多困惑。这个解释很好地解决了我的困惑。 不幸的是,答案中帖子的链接都已失效。

以上是关于Web API OAuth Bearer Token 安全性的主要内容,如果未能解决你的问题,请参考以下文章

Web API 2 OWIN Bearer Token cookie的用途?

使用 OAuth2 Bearer Tokens 保护图像资源

如何同时使用 Bearer 和 oauth2 passport.js 策略?

如何生成 Bearer 令牌以调用远程 Web API

OAuth 2.0: Bearer Token Usage

OAuth 2.0: Bearer Token Usage