通用的方法来验证客户端并确保RESTful API
我一直在挖掘通过stackoverflow / security.stackexchange线程,并没有得到明确的答案,为客户提供一种通用的方式来安全地使用RESTful服务,我正在通过asp.net的web api构建。 在搜索这个答案时,我看到“授权”和“认证”可以互换使用,所以我想指出,我只想验证请求身份和合法性。 所以,在这一点上,我不认证用户。
亚马逊的模式似乎是“滚动你自己”时引用的模型,但在这种情况下,我明白亚马逊已经提供了“论文”的说法,所以在这里没有太多的改进。 这篇文章,没有OAuth设计安全REST(Web)API,是非常有用的。
我收集的是:
我对2有几个问题,或许我的思想不能包装。 首先,这不是应该保密的应用秘密吗? 所以,如果一个JavaScript客户端发出请求,这不会影响应用程序密钥的保密性? 为什么有一个应用程序的秘密,然后当我可以通过验证应用程序密钥,随机数值和服务器IP验证请求身份? 我明白服务器端语言如php,ruby或c#.net不会公开这个秘密,但我希望这对JS和编译语言都是安全的。
最后,Facebook有一个开发者安全检查清单,告诉开发者“永远不要将你的App Secret包含在客户端或可反编译的代码中”,这会向我建议一个加密的web.config或类似的东西。 这个解决方案对于将REST服务暴露给任何通过JavaScript使用的人来说都是行不通的。
我已经梳理的其他线程:
http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/
https://developers.facebook.com/docs/facebook-login/security/
保护REST API / Web服务的最佳实践
REST身份验证方案的安全性
HTTP基本认证,而不是TLS客户端认证
RESTful认证
我使用OpenID Connect来保护我的应用程序。 举个例子,你在#2中讨论的客户端将是RP(资源提供者),像Google这样的认证系统将成为你的OP(OpenID提供者)
客户端必须提供应用程序密钥/密钥以验证他们是谁。
实际上就是你的应用程序,并且你的客户机密钥不会超过你的/etc/passwd
文件。 这个秘密是RP用来与OP交谈以获取数据的秘密。
简而言之,流程是
/restapi
上一篇: Universal way to authenticate clients and secure a RESTful api