2016-07-28 76 views
8

比方说,我写了一段代码,让一个HTTP调用到Web API,这样的:什么唯一标识一个客户端向Web API发出请求?

$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请求。

+0

也许创建两个游标,一个在另一个里面? – Odonno

+0

你想用这些信息来完成什么? – mrmcgreg

+0

@mrmcgreg:安全的终端,不需要用户登录。或者至少,让我们找到并锁定恶意用户的方法。就目前而言,我只是试图获得一个整体的图景。 – VSO

回答

1

我的团队已经完成了这项工作,要求在所有请求中包含标识标头。这确实需要主叫方的一些定制,但并不一定要求用户登录。当然,头部的值可能会被恶意用户改变,所以如果这些呼叫需要非常安全,您将需要传统的认证。

3

您正在描述对预认证的需求。

IP将始终可用。您可以将服务限制为仅限这些IP范围。这不是一个很好的认证方式。

试图绕过不得不执行身份验证是不安全的。您应该使用适当的身份验证方法。将IP限制与其他方法相结合是很好的。

John Meyer的回答是本质上是基于预共享令牌的用户认证。拥有一个有效的令牌构成了持续登录。该令牌比典型的基于令牌的用户认证要容易得多,该用户认证建立了有限生命周期的临时令牌。

如果您决定使用预共享令牌路由,请使用支持正确旋转或令牌随时间变化的方法,以免它们不容易受到重播攻击。

此方案的最佳选择是典型的基于会话令牌的用户验证。

如果你真的是兴趣谁在使用你的服务,只是他们被唯一标识,你可以安全地通过HTTP Set-Cookie头建立每个用户会话(或永久的,或任意寿命)的cookie是所有客户都应自动尊重和支持,然后将其用作跟踪方法。

0

我认为你总是可以完全认证。我看到你想要获得半安全终点的愿望,但我不认为任何方法都能为你提供最好的服务。 MAC,ip,用户代理,自定义字段都可以伪造成诚实的。使用不记名令牌或会话令牌是你唯一的选择。对于公共apis,您可以基于ip限制用户请求,或者您可以尝试查明特定ip是否试图利用您并因此阻止它,但无论如何找到真实身份可能都是不可能的。

1

你似乎对此很困惑。你正在寻找的是所谓的认证。

为您标记C#中,我假设您正在开发的API在C#。我建议检查Web Api

有几个可用的验证方法,这些天。如果你正在开发一个休息API,你可以使用json web tokens

你可以得到很多信息有关客户端通过调用http headers您的API。

相关问题