0

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

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

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

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

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

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

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

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

4

2 回答 2

2

首先:

但是最近不是有一个动作来摆脱浏览器中的 cookie 吗?还是默认禁用cookies而用户必须打开它们?(即选择加入而不是退出)

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


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

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

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

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

因此,按照我的看法,您要么必须将此信息存储在服务器上,要么存储在令牌本身中。否则,听起来你是在正确的轨道上。

于 2013-09-23T08:38:57.143 回答
0

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

于 2013-09-23T09:05:31.357 回答