我希望为我的应用程序创建一个(REST) API。最初/主要用途是供移动应用程序(iPhone、 Android、 Symbian 等)使用。我一直在研究基于 Web 的 API 的认证和授权的不同机制(通过研究其他实现)。我已经理解了大部分基本概念,但仍然在一些领域寻求指导。我想做的最后一件事是重新发明轮子,但我没有找到任何符合我的标准的标准解决方案(然而我的标准被误导了,所以也可以随意批评它)。此外,我希望所有使用它的平台/应用程序的 API 都是相同的。
我将继续并抛弃我对 oAuth 的反对意见,因为我知道这可能是第一个提供的解决方案。对于移动应用程序(或者更具体地说是非 Web 应用程序)来说,离开应用程序(到 Web 浏览器)进行身份验证似乎是错误的。此外,浏览器没有办法(我知道)将回调返回给应用程序(特别是跨平台)。我知道有几个应用程序可以做到这一点,但它只是感觉不对,让应用程序用户体验中断。
外部开发人员将请求 API 帐户。他们将会收到一把钥匙和一个秘密钥匙。每个请求至少需要三个参数。
需要 apikey 来标识发出请求的应用程序。时间戳的作用类似于 oauth _ nonce,可以避免/减轻重播攻击。散列确保请求实际上是从给定 apikey 的所有者发出的。
对于经过身份验证的请求(代表用户完成的请求) ,我还没有决定是使用 access _ token 路由,还是使用用户名和密码散列组合。无论哪种方式,在某些时候都需要用户名/密码组合。因此,当它这样做,一个散列的几个信息片段(apikey,apissecret,时间戳) + 密码将被使用。仅供参考,他们必须首先哈希密码,因为我不存储密码在我的系统中没有哈希。
仅供参考,这不是一个关于如何构建/结构化 API 的请求,而是关于如何仅在应用程序内部处理身份验证和授权的请求。
对于只需要 apikey 作为请求的一部分的 API,如何防止 apikey 所有者以外的其他人能够看到 apikey (自从明确发送以来)并提出过多的请求来超过使用限制?也许我只是想多了,但是难道不应该有一些东西来验证某个请求是否已经被 apikey 的所有者验证了吗?在我的案例中,这就是这个秘密的目的,它从来没有显示/传输没有被散列。
说到散列,md5和 hmac-sha1怎么样?当所有的值都使用足够长的数据进行散列时(即。阿皮斯克雷特) ?
我之前一直在考虑向我的用户密码散列中添加每个用户/行的 salt。如果要这样做,应用程序如何能够在不知道使用的 salt 的情况下创建匹配散列?