我已经做了很多关于如何保护ASP.Net Web API的文章。它一直很混乱,他们的文档并不总是很清楚。这可能是一个重复的问题,但我对SO的搜索没有发现任何100%。
如果您想让第三方访问您的Web API,那么您需要使用OAuth之类的东西。我已经阅读了大量关于OAuth的例子,在阅读之后,我确信这不是我走的路。我不想让其他人访问API。
这是我的情景。我已经使用ASP.Net MVC 4和Web API作为后端。我使用了Angularjs并在前端创建了一个SPA Web应用程序。用户自己登录并可以使用该系统。我绝不想让第三方针对我们的API开发任何东西。然而,Web API很有吸引力,因为它不需要会话。这意味着如果Web服务器太忙,我们可以更好地扩展。
我已阅读有关HTTP基本身份验证的信息,但这意味着我必须对每个请求都有效。如果用户信息在数据库中或在某些网络服务后面,那么对于每个看似不好的呼叫来说,它都是额外的IO。我更喜欢这样的想法,一旦你有一个令牌,你就可以去了,服务器可以在每次通话时做一些数学运算。
ASP.Net MVC Angularjs模板使用普通形式auth(cookie)和HTTP防伪标记。我很乐意使用这种方法但最近是不是有一个运动来摆脱浏览器中的cookie?或者是否默认禁用cookie,用户必须打开它们? (即选择而不是退出)。
我喜欢OAuth的想法,因为令牌可能包含用户所处的角色等声明。我不确定表单Auth如何包含角色信息,除非它也存储在cookie中。
更新:(基于投票结束,因为我不清楚我在问什么)
验证进入Web API的AJAX请求以及对角色进行授权的最简单方法是什么?不需要提供对第三方的访问权。
答案 0 :(得分:2)
首先:
但是最近没有一个动作去摆脱饼干 浏览器吗?或者是否默认禁用cookie并且用户有 打开它们? (即选择而不是退出)
据我所知,只有持久性cookie(或永久性cookie)需要选择加入。因此,在您的情况下,您似乎不必担心使用cookie。
除此之外,我仍然不确定问题是什么。您似乎已经确定OAuth不是正确的工具,并且基本身份验证有点尴尬。
但是,您也表达了一个似乎符合您要求的解决方案。即,具有在认证之后发回的令牌,该令牌可以与每个请求一起发送,并且应用一些数学来验证其真实性。这可以通过在服务器上使用某种私有随机信息来实现,这些私有随机信息可以在创建时加密或散列,然后在每个请求上进行验证。您可以将其粘贴在自定义HTTP标头中。
我认为你遇到的问题仍然是会话。实质上,创建服务器会话是关于跟踪用户被授权使用该服务的时间段。那么,那里有一点状态。
首先,您可以使用随机创建的信息(令牌代表/包含)来验证。您需要某种方法来验证HTTP请求标头(令牌)中的值是否来自您。但是,您(可能)还需要一些方法来管理授权时间段的到期时间。只要有人可以获得授权的时间有一些上限。
因此,我看到它的方式,您必须将此信息存储在服务器上或令牌本身内。否则,听起来你是在正确的轨道上。
答案 1 :(得分:0)
我认为软件无法帮助您保护在线服务,但更深入了解http的工作方式可能对您有所帮助。 对你的问题, 4.不,它们通常用于很多网站 但是,cookie /表格也可以被黑客入侵。实际上整个http请求都可以被黑客攻击,因为http作为基于文本的协议非常简单。每个字段都可以被用户或网关滥用。有些人认为cookie /表单有危险的原因是,您的服务器可能会使用输入来修改/插入/删除您的数据。但这只是这些技术的预期功能。为了避免它,你需要仔细解析请求字段,不要试图直接将值粘贴到sql命令,你需要先验证它是否格式良好,等等。 6.您可以检查用户代理以检测请求是否来自平板电脑,但假设“平板电脑不能始终使用cookie”是不正确的。