REST API授权和认证(网页+手机)
我已阅读oAuth,亚马逊REST API,HTTP基本/摘要等,但无法将它全部纳入“单件”。 这可能是最接近的情况 - 为移动应用程序创建API - 身份验证和授权
我想建立以API为中心的网站 - 服务。 所以(一开始)我会在中心和网站 (PHP + MySQL)通过网络接口通过cURL , Android和iPhone进行连接。 所以3个主要客户 - 3个API密钥。 而任何其他开发人员也可以通过API接口进行开发,他们将获得他们自己的API密钥。 根据userLevel状态API操作将被接受/拒绝,如果我是管理员,我可以删除任何内容等,其他所有操作只能处理其本地(帐户)数据。
首先,授权 - 我应该使用oAuth + xAuth还是我自己的某种类型的实现(请参阅http://docs.amazonwebservices.com/AmazonCloudFront/latest/DeveloperGuide/RESTAuthentication.html?r=9197)? 据我了解,在亚马逊服务用户是== API用户(有API密钥) 。 在我的服务中,我需要将标准用户/帐户(在网站上注册的用户)和开发者帐户(应该有他们的API密钥)分开。
所以我首先需要授权API密钥 ,然后验证用户本身。 如果我使用亚马逊的方案来检查开发人员的API密钥(授权他们的应用程序),我应该使用哪个时间进行用户身份验证?
我阅读了关于通过api.example.org/auth
获取令牌(通过HTTPS ,HTTP Basic)发布我的用户名和密码,然后在每个以下请求转发它。 如果我在Android和网站上同时登录,如何管理令牌? 如果我仅在第一次请求时(在发送用户名和密码时)使用SSL,并且只使用HTTP,那么中间人攻击又如何? 这个例子中的问题不是一个问题保护REST服务的密码?
总之,保护密钥的最佳方式不是传输密钥。
也就是说,我们通常使用一种方案,其中每个“API密钥”包含两部分:非秘密ID(例如1234)和密钥(例如字节[64])。
现在,当消费者首先访问您的API,连接,拥有他
并把他还给他
消费者应该存储会话持续时间以保持事情的快速和平稳,并且应该计算并保持客户端和服务器之间的时间偏移。
消费者现在应该计算API密钥和密码的盐渍哈希值。 通过这种方式,消费者拥有与密码和API密钥完全相同的哈希值,就像存储在数据库中的哈希值一样,但是没有任何东西通过网络传递。
现在,当消费者后续访问你的API,做真正的工作,让他
服务器不应该接受超过2秒的时间戳,以防止重放攻击。
服务器现在可以计算出与客户端相同的散列(passwordhash + request_salt + request_timestamp + apikeyhash),并且可以肯定的是,