唯一标识向Web API发出请求的客户端的内容
What Uniquely Identifies a Client Making a Request to Web API?
假设我写了一段代码,对web api进行http调用,类似于:
$http.get('www.myapi.com/api/controller/endpoint').then(function(resp){...})
然后我把这个代码交给两个住在不同城市的人,他们从各自的房子(只是从一些浏览器)访问我的API。我的API可以从http请求中获得什么信息,使我能够区分调用它的人A和人B?IP是否始终可用?MAC地址是否可用?还有什么?
当调用我的API时,人A怎么能假装是人B?
此外,如果人C从他们自己的Web API(后端)调用我的Web API会怎样?会提供相同的信息吗?或者会有什么不同?
这是一个普遍的问题,但如果您想了解具体情况,让我们假设ASP.NET Web API 2正在接收http请求。
您描述的是对预身份验证的渴望。
IP将始终可用。您可以将服务仅限于这些IP范围。这不是进行身份验证的好方法。
试图绕过必须执行身份验证是不安全的。您应该使用正确的身份验证方法。将IP限制与其他方法相结合是可以的。
John Meyer的答案是本质上基于预共享令牌的用户身份验证。拥有一个有效的令牌就意味着要不断登录。与建立寿命有限的临时令牌的典型基于令牌的用户身份验证相比,令牌更容易被破坏。
如果您决定采用预共享令牌路由,请使用一种支持令牌随时间正确旋转或排列的方法,这样它就不会受到重放攻击。
对于这种情况,您的最佳选择是典型的基于会话令牌的用户身份验证。
如果您实际上对谁在使用您的服务不感兴趣,只是他们是唯一标识的,那么您可以通过所有客户端都应该自动尊重和支持的http Set-Cookie
标头为每个用户安全地建立一个会话(或永久或任意生存期)cookie,然后将其用作跟踪方法。
我的团队通过要求在所有请求中包含一个标识头来实现这一点。这确实需要调用方进行一些自定义,但不一定要求用户登录。当然,恶意用户可能会更改标头的值,因此如果这些调用需要非常安全,则需要传统的身份验证。
您似乎对此感到非常困惑。您正在寻找的是所谓的身份验证。
当你标记C#时,我假设你正在用C#开发你的api。我建议查看Web Api。
目前有几种身份验证方法可用。如果您正在开发rest api,那么可以使用json-web令牌。
您可以通过http头获得许多关于客户端调用您的api的信息。
我认为您总是可以使用完全身份验证。我看到你希望使用一组半安全的端点,但我认为任何方法都不适合你。MAC、ip、用户代理、自定义字段——老实说,任何东西都可能被欺骗。使用无记名代币或会话代币是您在这里的唯一赌注。对于公共api,你可以根据ip限制用户请求,也可以尝试找出特定ip是否试图利用你,从而阻止它,但无论如何都不可能找到真正的身份。
- nodejs/ccurlhttp请求与postlerrest客户端相比速度较慢
- 从express请求对象获取客户端MAC地址
- 是Google自定义搜索API的客户端请求数量有限
- 从客户端捕获 HTTP 请求(包括 ajax)
- 如何查明SignalR客户端上是否有挂起的请求
- 如何将客户端进度侦听器添加到 JSF 2.2 ajax 请求中
- 遵循重定向的图像HTTP请求,客户端
- 快递中的客户端 DEL 请求.js
- RxJS:在每次返回并行http请求时更新客户端
- 使用“GET”的客户端请求表单,即使定义了“POST”.javascript iframe是原因吗
- 客户端Handlebars导致404个请求
- Jwebsocket :如何按名称将请求发送到特定客户端
- 隐藏客户端请求上的标头
- Nodejs,Express - 尝试从请求对象获取客户端 IP - 显示 127.0.0.1
- 如何在服务器 ASP.NET 上请求客户端 Cookie
- 如何处理客户端节点上的异步请求
- 客户端将多部分/表单数据请求的文件部分的内容类型设置错误
- 客户端通过JS请求JSON并填充Rails视图
- 从API请求(客户端)获取输出
- 是否可以用javascript记录HTTP请求客户端