安全的PHP REST API

时间:2015-10-13 16:56:49

标签: api

我正在建立一个社交网站,我想为开发人员提供API。所以,我正在考虑使用REST API。

现在这个问题不是关于如何创建REST API。许多网站和SO问题都很好地解释了这一点。

我的问题是: 当我向开发人员提供此API时(可以说可以用来获取用户信息)。

假设用户1不希望他的出生日期和电子邮件可见

假设用户2不希望他的手机号码可见

说用户3不希望任何与朋友分开的人看到他的信息

......依此类推(每个用户都有自己的隐私设置,我已经存储在数据库中)

现在,我如何正确认证以确保:

1)当开发人员未对应用程序进行身份验证以使用API​​访问其信息时,他们将无法访问用户信息

2)限制开发人员访问由用户设置为私有

的字段

我是否必须为此制作单独的数据库?有没有简单,专业和安全的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

如果你查看各种Google+和FB API的文档,你会看到他们做了什么。这是一个例子:

https://developers.facebook.com/docs/marketing-api/authentication

通常,您使用https进行连接,为某种身份验证调用提供了几个不同的密钥代码(api密钥等),然后您返回会话令牌,并将其传递给所有后续调用需要一个(可能涉及非公开数据)。

通常用于此类事务的身份验证没有任何特别之处,任何安全身份验证方法都可以与其他任何方法一样工作。所有身份验证都确定API调用者的身份和/或用户的身份。然后由API代码决定谁可以访问什么。

您可以让一小组受信任的开发人员在开发环境中开发API,然后更小的受信任管理员组将该API部署到生产服务器,并确保没有其他人可以通过API访问这些服务器。我相信这基本上就是FB和Twitter等等。

但是,如果您真的想阻止开发API的开发人员以及设置和维护生产服务器(和数据库)的管理员无法获取用户的私有数据,那么必须在用户的计算机在发送到服务器之前,使用从未发送到服务器的密钥。因此,服务器和服务器环境中的任何人都无法完全解密该数据。

但开发在用户计算机上运行的加密程序的开发人员可以将密钥或解密版本的数据发送到某个地方的计算机等,所以实际上没有任何方法可以避免至少信任一些人参与其中。

顺便说一句,Google+,Twitter,Facebook等都不这样做。他们可能会在生产数据库中以加密形式存储一些私人数据,并且可能会限制对一小群人访问这些数据库,甚至那些有权访问数据库的人也可能无法看到私人信息。解密它 - 但数据使用https发送到服务器;它由用户的浏览器加密,但随后在Web服务器上解密,并且在Web服务器的内存中以未加密的形式存在,至少在短时间内存在,因此理论上对于这些公司的人来说理论上是可行的。谁拥有正确的专业知识和正确的访问权限来获取用户的私人数据。因此,我们在Twitter / FB等上的私人数据并非真正100%安全。 (我怀疑任何地方的任何数据都是100%安全的。)

虽然您可以从阅读其API文档中收集到常见的做法,但实际上并没有任何既定的标准或最佳做法与如何在PHP中为社交媒体API编码身份验证系统有关。

值得一提的是,目前许多需要用户身份验证的网站允许用户使用各种外部身份验证系统进行身份验证,因此一旦他们签署到使用该系统的一个地方,他们就会有效地签名到每个地方使用它。一个非常流行的外部认证系统是GoogleID;例如,Stack Overflow的用户可以使用他们的Google登录进行身份验证:

https://developers.google.com/identity/

https://developers.google.com/identity/choose-auth

GoogleID可能受到了OpenID的启发。以下是用于实现促进OpenID样式身份验证的API的库列表:

http://openid.net/developers/libraries/

该页面包含一些可能感兴趣的php库。

顺便说一下,在社交媒体网站的背景下谈论数据安全性,这里是一个关于美国一般法律要求的介绍性维基页面,用于处理(可能)个人识别信息的公司:

https://termsfeed.com/blog/privacy-policies-are-mandatory-by-law/