【发布时间】:2019-11-21 20:49:06
【问题描述】:
我在编写网站和 API 时遇到问题。如果重要的话,它们在同一个项目中。
简化为最简单的形式,它是一个目录网站和 API。您在数据库中有产品和显示产品信息的页面。您还有其他页面允许编辑此信息和添加新产品等。
您可以通过三种方式做到这一点:
- 匿名用户可以在网站上列出产品并查看有关它们的公开信息。
- 登录用户可以在网站上列出、查看(包括私人信息)、编辑、创建和删除产品。
- 拥有有效 API 密钥的用户可以使用 API 列出、查看(包括私人信息)、编辑、创建和删除产品。
我遇到的问题是该网站对 API 使用 AJAX 调用,并且这些仅在网站用户经过身份验证时才有效。在没有身份验证 cookie 或 API 密钥的情况下调用 API 会因设计而失败。
以安全的方式向后端 API 识别未经身份验证的网站以使其能够工作的推荐方法是什么?
我的想法包括:
网站的特殊 API 密钥,但它必须在 Javascript 代码中的某个地方对整个世界都是可见的,因此有人可以使用它来自己访问 API 并绕过我想要的任何速率限制实施。
我考虑在 Web 控制器的会话中设置一些内容,然后可以在 API 控制器中进行验证,但我遇到了对 API 的未经身份验证的调用重定向到帐户控制器上的登录页面的问题,然后设置相关的会话变量,这意味着无论是否经过合法身份验证,后续 API 调用都会成功。这似乎是最有前途的选择,但我对 ASP.NET Core 的工作原理还不够熟悉,无法使其健壮。
【问题讨论】:
标签: c# asp.net asp.net-mvc