2014-12-03 97 views
0

我已经设置了一个基于web的API来允许远程应用程序获取/发布数据。每个API调用都使用用户ID和密码进行验证,该用户ID和密码使用只有远程应用程序和网站才知道的密钥加密。此认证不仅确保用户可以访问该API,而且还允许我根据用户的配置文件实现安全功能(即用户A可以看到项目A & B,但不能看到项目C)。如何为本地和远程请求实现API安全性?

我希望我的服务器端网站页面能够通过AJAX调用远程调用相同的API方法,但是,在代码中存储加密密码看起来不正确,而且我的网站实现了一个“登录为”功能,这将不允许我设置加密密码,因为密码不是以纯文本格式存储的。

对于不需要加密用户密码的远程和“本地”调用实现API安全性的好方法是什么?

回答

0

您不应该在服务器端代码中存储用户名和密码。迟早有人会盯着你的代码,你的数据会变得脆弱。

但你也不应该在客户端代码中存储秘密(密钥)。你不应该假设你的客户可以信任保守这个秘密。

给予用户对项目A和B(但不是C)的访问称为授权,并取决于您是否知道谁调用了您的API(验证)。

您应该仔细研究身份验证协议,如OpenID Connect和授权协议,如OAuth 2.0

另请参阅我对this问题的回答。

+0

只是为了澄清,没有秘密密钥存储可查看客户端,密码也不是以纯文本形式存储在任何地方。 – 2014-12-08 12:42:08

+0

即使您在客户端加密它们,如果客户端可以解密,那么攻击者也可以解密。安全令牌更安全,因为它们只在有限的时间内有效,并且无需在客户端存储秘密。 – MvdD 2014-12-08 17:25:26

+0

对于简单的AJAX调用,OpenId或Oauth是不是过度矫枉过正? – 2014-12-08 21:05:29