我一直在挖掘stackoverflow / security.stackexchange线程并且没有明确的答案为客户提供安全使用RESTful服务的通用方法我正在通过asp.net的网络构建API。在搜索这个答案时,我看到"授权"和#34;身份验证"可以互换使用,所以我想指出我只是想要验证请求身份和合法性。所以,在这一点上,我不是在验证用户。
亚马逊的模型似乎是在推出自己的模型时引用的模型,"但是,在这种情况下,我确实理解亚马逊已经提供了#34;论文"总的来说,这里没有多少重新发明。这个帖子, Designing a Secure REST (Web) API without OAuth,非常有帮助。
我收集的是:
我在2中遇到的问题很少,或许,我的思绪可能无法自我解决。首先,不是应该保密的应用秘密吗?那么,如果一个javascript客户端提出请求并不会影响应用程序密钥的保密性呢?为什么有一个应用秘密然后我可以通过验证应用密钥,现时值和服务器IP验证请求身份?我知道像php,ruby或c#.net这样的服务器端语言不会暴露这个秘密,但我希望这对JS和编译语言来说都是普遍安全的。
最后,Facebook有一个developer security checklist告诉开发人员“永远不要在客户端或可编译代码中包含你的App Secret”,#34;这会向我建议加密的web.config等。此解决方案不适用于将REST服务暴露给通过javascript消费的任何人。
我梳理的其他主题:
http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/
https://developers.facebook.com/docs/facebook-login/security/
Best Practices for securing a REST API / web service
Security of REST authentication schemes
HTTP Basic Authentication instead of TLS client certification
RESTful Authentication
答案 0 :(得分:0)
我保护我的应用程序的方式是使用OpenID Connect。对于您的示例,您在#2中讨论的客户端将是RP(资源提供商),而像Google这样的身份验证系统将是您的OP(OpenID提供商)
客户端必须提供应用密钥/密钥才能验证他们是谁。
实际上是您的应用程序,您的客户端机密不会让您的服务器超出您的/etc/passwd
文件。这个秘密就是RP用来与OP通信以获取数据的秘密。
简而言之就是
/restapi