通用的方法来验证客户端并确保RESTful API

我一直在挖掘通过stackoverflow / security.stackexchange线程,并没有得到明确的答案,为客户提供一种通用的方式来安全地使用RESTful服务,我正在通过asp.net的web api构建。 在搜索这个答案时,我看到“授权”和“认证”可以互换使用,所以我想指出,我只想验证请求身份和合法性。 所以,在这一点上,我不认证用户。

亚马逊的模式似乎是“滚动你自己”时引用的模型,但在这种情况下,我明白亚马逊已经提供了“论文”的说法,所以在这里没有太多的改进。 这篇文章,没有OAuth设计安全REST(Web)API,是非常有用的。

我收集的是:

  • 应用程序必须要求SSL请求,因此应该拒绝“http://myapi.com/users/1”的GET,并且要求开发人员知道https的错误请求响应。
  • 客户端必须提供应用程序密钥/密钥以验证他们是谁。
  • SSL +证书是一个好主意
  • 需要一个现时值
  • 当客户注册他们的应用程序时,需要输入他们将要发送请求的URL和IP以在接收到请求时进行验证。 我对此的担忧是外部应用程序的可移植性,即应用程序被移到具有不同IP的新服务器,现在它不起作用。
  • 我对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交谈以获取数据的秘密。

    简而言之,流程是

  • 用户连接到您的API端点,例如/restapi
  • 您的终端将用户重定向到注册您的应用程序的Google
  • 用户登录OP(例如Google)并获取代码传递给RP
  • RP会去OP得到公开信息,例如电子邮件
  • 然后,RP将使用该openid信息查找自己的授权表
  • 一旦RP验证用户的授权,RP将提供剩余的信息。
  • 链接地址: http://www.djcxy.com/p/71361.html

    上一篇: Universal way to authenticate clients and secure a RESTful api

    下一篇: Any Spring Framework support for REST security?