在Web Api 2中实现安全性的最佳方法是什么?

时间:2013-12-24 06:33:00

标签: oauth asp.net-web-api

尽管Web API 2使用OAuth提供了内置身份验证实现,但是当我阅读OAuth Bearer Tokens时,我感到困惑。使用基本身份验证不是我的选择,因为我们不想使用SSL。

您认为公开访问的API的最佳安全实施是什么?

2 个答案:

答案 0 :(得分:3)

我现在要做什么:
首先,正如巴德里所说,使用SSL非常重要,否则就无法保证api ...
现在,您可以提供一些登录操作(例如,https://my.webapi.com/login的帖子请求)以及所有帖子信息 如果此人已通过身份验证,您可以使用“持票人令牌”进行回复,实际上它可以是您想要的任何令牌。令牌基本上是随机字符串。你可以在里面加上数字,字母等 使用这些令牌,因此用户无需在每次请求时发送其凭据。重要的是要注意,该标记当然必须过期(例如,例如在一小时不活动之后) 用户现在必须在每个请求中发送此令牌。这将用于在每个后续请求中对用户进行身份验证。 (只要令牌当然有效)
为了提供更好的用户体验,您还可以在用户进行身份验证时发送刷新令牌。此刷新令牌也保留在用户端,并将用于刷新令牌。这样,只要此刷新令牌有效,用户就不需要提供其凭据。这可能比普通的“身份验证令牌”长得多,因为它通过安全连接很少发送,因此被截获的可能性非常小。
还有一件事需要考虑:会话劫持。如果有人能够获得令牌,他可以在用户不知情的情况下冒充用户。为了防止这种情况(有些),您应该将这些令牌链接到用户当前的IP地址。如果IP地址不同,他将不得不再次登录。

正如我之前提到的,您使用发布请求安全地登录,然后返回一些令牌。这些令牌必须随用户发出的每个请求一起发送。使用http协议,您只需在http标头中提供令牌即可。在标题的Authorization部分或您自己的某个标题中。 (约定规定您自己的标题以X-开头,因此您可以使用例如X-My-Webapi-Auth-token)

我以后会做什么:
只要您使用api控制所有应用程序,这就完美无缺。如果您想打开api直到外部开发人员,您需要采取更多安全措施,因为您可能希望能够例如阻止申请,让他们在x请求后付款等等。
但是当你到达那一点时,你可能想考虑设置一个OAUTH服务进行身份验证,这是一个类似的故事,但有点复杂。我(或其他人)可以详细说明您可以采取的措施,以防您真正想要它。

答案 1 :(得分:1)

如果您不能使用SSL,则不能使用持有人令牌,期限。它与使用普通HTTP的基本身份验证完全相同。构建承载令牌的基本前提是将存在传输安全性。您引用的帖子,即Eran Hammer,是关于为什么基于消息的安全性与承载令牌+ SSL相比更好。如果您在使用SSL时有约束,则不得使用承载令牌。

现在,运输安全(SSL)绝对是最低限度。如果您不能使用它,因为您无法购买证书,您将需要重新考虑该决定。如果还有其他正当理由,请查看Eran的Hawk Authentication。 Thinktecture IdentityModel具有Hawk实现(作为消息处理程序和OWIN中间件)。看看它here