api - 如何使用公钥保护 Web API 免受未经授权的访问?
问题描述
在了解 Web API 的本质的同时,提出了一些关于其安全性的问题。设计 Web API 的最佳实践是什么,以便只有授权用户才能访问它。我尝试检查以下选项,但没有一个能够达到完美的安全性。
1) 我不能依赖请求来源、推荐人或用户代理字符串,因为它们很容易被欺骗。
2) Web API 只需要一个公钥来访问它,因此 CSRF 令牌也不适合实现。
有没有其他方法可以确保请求仅来自受信任的来源?
我的用例是我想实现像谷歌地图这样的客户端 API,任何购买了 API 访问权限的人都会将他们的网站域列入白名单,并且可以在他们的网站上包含我的插件。然后插件将代表用户向我的 API 发出请求。
这是一个好主意,如果我在 Web API 上应用一些请求签名逻辑,以便我的服务器可以验证请求者并拒绝未经授权的来源。我假设我必须对我的请求签名逻辑保密,所以我可能需要对代码进行一些混淆。
解决方案
您没有提及用例的任何内容,特别是如果客户端是系统或人?
首先,默默无闻的安全从来都不是一个好的选择。其次,“创建自己的安全系统”被认为是不好的做法,最好站在有安全知识和经验的人的肩膀上。
在不知道确切的用户案例的情况下,很难提出很多建议......但是,我建议你看看 jwt 令牌之类的东西(我猜你在 webclient 后面有一个人作为用户你的网络服务)......因为你已经用 asp.net-web-api 标记了这个问题,我还建议你看看https://identityserver.io项目......我以前成功地使用过 IdentityServer4在一个大型的 asp.net webapi 项目中......
推荐阅读
- python - 如何开始使用python
- python - 使用自定义函数在 sklearn 中创建管道?
- javascript - JsGrid:获取值的按钮
- php - 通过 PHP 使用 IAM 服务角色获取 AWS 服务中的凭证
- javascript - 反应 - 单击简历标题不会下载简历 pdf 文件
- r - 将命令行参数传递给 anova
- python - 如何导出 Estimator 的最佳模型?
- web-scraping - beautifulsoup href 返回空字符串
- javascript - 从 background.js 创建窗口时,有没有办法链接到另一个目录中的 html 文件?
- javascript - html5中div的拖放在dragstart时显示透明