我有一种情况,我想限制一些API只用于服务器到服务器的调用,其他API可以直接从Web浏览器调用。所有API仍应在互联网上提供。这种情况的最佳方法是什么?
http://secureapi.myserver.com/v1/resources 和 http://api.myserver.com/v1/resources
或者
http://api.myserver.com/secure/v1/resources 和 http://api.myserver.com/common/v1/resources
或
http://api.myserver.com/v1/resources 使用基于用户代理的检查来识别呼叫者
更好的建议将受到高度赞赏。
答案 0 :(得分:3)
如果您希望仅服务器端的API实际上只能从服务器端访问,那么您必须实现适当的访问控制模型。让您的API客户端为其HTTP请求提交Authorization
标头,以便服务器可以准确区分可信服务器端呼叫者和网络上的浏览器。
不要依赖用户代理字符串等可欺骗的东西。这是通过默默无闻的安全保障,并保证稍后会咬你。
请记住你的两个愿望:
我想限制一些API仅用于服务器到服务器的调用
和
所有API仍应在互联网上提供。
是为您的API设计正确的安全身份验证层的尖叫。
答案 1 :(得分:1)
使用跨源请求(CORS)机制。在REST API上配置它以使用CORS。
此处提供更多信息:
http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api