对于未经身份验证的 Web API,将客户端限制为来自自己 app/website 的客户端

Constrain clients to ones coming from the own app/website for unauthenticated web API

这些是标准:

Objective:我想限制网络 API 只允许来自我自己的应用程序的请求,而不需要用户进行身份验证。有现成的技术吗?

问题在于,由于 Web 应用程序的代码及其发出的请求对客户端是透明的,因此它无法为服务器的身份验证保密。

我想在服务器端创建一次性访问令牌,然后使用客户端的访问令牌进行 API 调用。现在这会使从外部发出请求变得更加困难,但如果您首先从原始网站获取此令牌,您仍然可以发出请求(即使您必须为每个请求都这样做)。

如果重要的话,我会使用 ASP.NET MVC 网站和 ASP.NET Web API 端点来实现它。

类似于this question但不完全相同。

提前致谢。

几年前我问过 pretty much the same question,对于未经身份验证的用户,某种令牌几乎是您唯一的选择。它不会使未经授权访问您的 API 变得不可能,但确实会使它变得更加痛苦。

我在我的解决方案中采用了稍微不同的方法,使用 2 个 cookie 来保护一些匿名 GET 请求。其中之一是匿名识别 cookie,它被用作另一个自定义 cookie 的加密盐,该自定义 cookie 提供给传递 javascript 的页面。只有当 API 请求收到这两个 cookie 并且解密结果令人满意时,我才允许 WebAPI 响应。但就像我提到的,这只会让在 javascript 应用程序之外获得访问权限变得更加痛苦,并非不可能。

这是在 Web 中使用令牌的参考API:http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/