【问题标题】:How do you secure your ASP.Net Web API without catering for third parties?您如何在不为第三方提供服务的情况下保护您的 ASP.Net Web API?
【发布时间】:2013-09-23 07:58:53
【问题描述】:

我已经阅读了大量有关如何保护您的 ASP.Net Web API 的内容。这一直很混乱,他们的文档并不总是很清楚。这可能是一个重复的问题,但我对 SO 的搜索没有 100% 找到任何东西。

我知道,如果您想让第三方访问您的 Web API,那么您需要像 OAuth 这样的东西。我已经阅读了大量有关 OAuth 的示例,并且在阅读后我确信这不是我要走的路。我不想让其他人访问 API。

这是我的场景。我在后端使用了 ASP.Net MVC 4 和 Web API。我使用了 Angularjs 并在前端创建了一个 SPA Web 应用程序。用户自行登录,即可使用系统。我永远不会允许第三方针对我们的 API 开发任何东西。然而,Web API 很有吸引力,因为它消除了对 Session 的需求。这意味着如果网络服务器太忙,我们可以更好地扩展。

我已阅读有关 HTTP 基本身份验证的信息,但这意味着我必须验证每个请求。如果用户信息在数据库中或在某些网络服务后面,那么每次调用都是额外的 IO,这看起来很糟糕。我更喜欢这样的想法,一旦你有了一个令牌,你就可以开始了,服务器可以在每次调用时做一些数学运算。

ASP.Net MVC Angularjs 模板使用普通形式的身份验证 (cookie) 和 HTTP 防伪令牌。我很乐意使用这种方法,但最近不是有一个动作来摆脱浏览器中的 cookie 吗?还是默认禁用cookies而用户必须打开它们? (即选择加入而不是退出)。

我喜欢 OAuth 的想法,因为令牌可以包含诸如用户所处角色之类的声明。我不确定表单 Auth 将如何包含角色信息,除非它也存储在 cookie 中。

更新:(基于投票结束,因为不清楚我在问什么)

验证进入 Web API 的 AJAX 请求并对角色进行授权的最简单方法是什么?不需要向第三方提供访问权限。

【问题讨论】:

    标签: security asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    首先:

    但是最近没有在 浏览器?或者是默认禁用cookies而用户有 打开它们? (即选择加入而不是退出)

    据我所知,只有持久性 cookie(或永久 cookie)需要选择加入。因此,在您的情况下,您似乎不必担心使用 cookie。


    除此之外,我仍然不确定问题出在哪里。您似乎认为 OAuth 不是正确的工具,而且基本身份验证有点尴尬。

    但是,您也提出了一个似乎满足您要求的解决方案。即,拥有一个在身份验证后发回的令牌,该令牌可以随每个请求一起发送,并应用一些数学运算来验证其真实性。这可以通过在服务器上使用某种私有随机信息来完成,这些信息可以在创建时加密或散列,然后在每个请求上进行验证。您可以将其粘贴在自定义 HTTP 标头中。

    我认为您将遇到的问题仍然是会话。本质上,创建服务器会话是关于跟踪用户被授权使用服务的时间段。所以,那里有一点状态。

    首先,您拥有允许您验证的随机创建的信息(令牌代表/包含)。您需要某种方法来验证 HTTP 请求标头(令牌)中的值是否来自您。但是,您还(可能)需要某种方法来管理授权时间段的到期。只要对某人可以被授权的时间有一些上限。

    所以,在我看来,您要么必须将这些信息存储在服务器上,要么存储在令牌本身内。否则,听起来你是在正确的轨道上。

    【讨论】:

    • 我正在查看简单的 Web 令牌,其中到期编码在令牌中。这似乎很适合我们。感谢您的反馈意见。我现在感觉更舒服了,因为我正在尝试正确的事情。您会建议我使用 HTTP 授权标头,然后使用我自己的自定义方案吗?那会是浏览器互操作的吗?
    • 任何 HTTP 标头都是浏览器可互操作的。您直接使用 HTTP,因此添加标头应该没问题。
    • 另外,我假设您使用的是 HTTPS。
    【解决方案2】:

    我没有看到任何软件可以帮助您保护在线服务的可能性,但更深入地了解 http 的工作原理可能会对您有所帮助。 对你的问题, 4. 不,它们通常在很多网站中使用 但是,是的,cookie / 表格也可以被黑客入侵。事实上,整个 http 请求都可以被黑客入侵,因为 http 作为基于文本的协议非常简单。每个字段都可能被用户或网关滥用。有些人认为 cookie / form 很危险的原因是,您的服务器可能会使用输入来修改/插入/删除您的数据。但这只是这些技术的预期功能。为避免,需要仔细解析请求字段,不要尝试直接将值粘贴到sql命令中,需要先验证是否格式正确等。 6. 可以通过 user-agent 检测请求是否来自平板电脑,但是“平板电脑并不总是能够使用 cookie”的假设是不正确的。

    【讨论】:

      猜你喜欢
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 2016-09-16
      • 2015-12-20
      相关资源
      最近更新 更多