我正在设计一个JSON Web API,并希望通过唯一的ID来区分客户端,以便监控使用情况并阻止恶意或不良表现的客户端。该API没有封装在JavaScript库中,也不仅限于Web应用程序,任何类型的客户端都可以使用它(桌面、手机等)。
问题是,Web应用程序(官方网站)本身也是API的客户端,因此必须公开其API密钥。因此,某些用户可以从页面中的JavaScript提取密钥并使用它,而不是生成自己的密钥。
是否可能通过一些更好/更智能的设计选择来缓解这个问题,或者我必须接受任何恶意使用API的用户都可以利用这一事实?
我对前端应用程序(EmberJS)和后端服务器(Go)拥有100%的控制,因此可以建议任何改变。
我正在使用每个会话/IP的速率限制来增加额外的保护层。
Twitter.com页面曾经也是其API的客户端。他们是如何解决这个问题的?
注意:问题不是关于身份验证或安全本身,而是如何要求第三方用户在身份验证之外使用API密钥的!
问题是,Web应用程序(官方网站)本身也是API的客户端,因此必须公开其API密钥。因此,某些用户可以从页面中的JavaScript提取密钥并使用它,而不是生成自己的密钥。
是否可能通过一些更好/更智能的设计选择来缓解这个问题,或者我必须接受任何恶意使用API的用户都可以利用这一事实?
我对前端应用程序(EmberJS)和后端服务器(Go)拥有100%的控制,因此可以建议任何改变。
我正在使用每个会话/IP的速率限制来增加额外的保护层。
Twitter.com页面曾经也是其API的客户端。他们是如何解决这个问题的?
注意:问题不是关于身份验证或安全本身,而是如何要求第三方用户在身份验证之外使用API密钥的!