我正在构建我自己的API,正在使用它:
1)Android App 2)桌面应用程序
我的一个网址是:http://api.chatapp.info/order_api/files/getbeers.php我的用户通过JSON从我的数据库中获取数据。我最近想到用API密钥创建身份验证。
关于如何做的任何想法?或者我是否必须执行http://api.chatapp.info/order_api/files/getbeers.php?api_key=之类的操作,然后将GET方法与存储在我的数据库中的某些密钥进行比较?
有什么想法吗?
答案 0 :(得分:2)
OAuth是一个复杂的协议,Googling和阅读文档会更好地学习,但这可能是保护API端点的一个很好的选择。
简而言之,OAuth是一种让用户通过证明他们被允许访问然后使用安全的访问令牌来访问您的API的方式。你提供的。
客户端通过传递" api-key"来自API服务器请求访问令牌。和某种"秘密密钥"。这些是在您注册使用API时提供给API用户的。
如果从客户端传递到API服务器的凭据是正确的,那么API服务器将使用"访问令牌#34;进行响应。此访问令牌在一定时间内有效,应与所有后续请求一起发送,以证明客户端已被授予访问权限以使用API。
客户端向您的API服务器发出数据的API请求,并且必须包含"访问令牌"。如果"访问令牌"包含且仍然有效(即尚未过期),然后您可以回复他们请求的数据。
以下是一些资源链接,可帮助您了解如何在API中实施OAuth。
http://scottksmith.com/blog/2014/07/02/beer-locker-building-a-restful-api-with-node-oauth2-server/ http://www.devx.com/webdev/create-your-own-rest-api-using-oauth-authentication.html
有关OAuth 1.0和OAuth 2.0的比较,请参阅this link,以确定哪种情况更适合您的情况。
答案 1 :(得分:2)
如果您需要对用户进行身份验证,那么我会选择Oauth。如果没有,则将加密的请求参数校验和添加到自定义请求标头。
答案 2 :(得分:2)
正如@mike所提到的,OAuth是复杂的API,更重要的是需要运行某个地方的第三个服务端点来提供访问的身份验证/授权。
有人认为你绝对不想希望做的是在网址中加入API密钥。这很容易被代理重放和/或欺骗和识别,并在日志文件中捕获。更好的解决方案是在您的请求中包含API密钥作为额外的HTTP标头,并在API端点中查找该特定值。
对于像您一样建议的简单用例,您可能会发现使用您在Android应用和API端点之间保留为共享密钥的密钥来验证API调用是值得的。如果采用这种方式,它就不容易改变,如果被破坏则意味着真正的PITA可以启用新的密钥并在其中启用。
如果你使用"共享密码",那么我建议让用户更容易(或至少有一些用户界面)更新该密钥以防万一损害。我假设您可以相当轻松地更新您的网络服务。这个过程不像OAuth或OAuth2那样安全,但实施起来肯定更简单,更快,同时仍能提供合理水平的安全性" (在这种情况下,安全性意味着"您被允许访问此API")。