我正在开发我的第一个移动应用程序,我需要建议。我在春季启动时创建了REST API,效果很好,但我想限制访问。它只能由我的应用程序使用。没有用户登录,仅从服务器获取数据。
将足够的一些API令牌,或者还有其他方法该怎么做?
也许这是一个愚蠢的问题,但我确实需要建议。
谢谢
您可以使用这些指针-
一个实体仅应具有执行其被授权的动作所需的权限集,不能再有其他权限。可以根据需要添加权限,如果不再使用,则应将其撤消。
除非明确授予用户“许可”,否则应该拒绝用户对系统中任何资源的默认访问级别。
设计应尽可能简单。所有组件接口及其之间的交互应该足够简单,以易于理解。
系统应验证对其所有资源的访问权限,以确保它们被允许,并且不应依赖于缓存的权限矩阵。如果对给定资源的访问级别被撤消,但未反映在权限矩阵中,则将违反安全性。
[此原理突显了以开放的方式构建系统的重要性-没有秘密,机密的算法。
授予实体的权限不应纯粹基于单个条件,基于资源类型的条件组合是更好的主意。
它涉及在不同组件之间共享状态的风险。如果一个人可以破坏共享状态,那么它就可以破坏依赖于此状态的所有其他组件。
它指出,与不存在安全机制相比,安全机制不应使资源更难以访问。简而言之,安全性不会使用户体验变差。
通过始终使用SSL,可以将身份验证凭据简化为在HTTP基本身份验证的用户名字段中提供的随机生成的访问令牌。它相对简单易用,并且免费提供许多安全功能。
如果使用HTTP 2,以提高性能–您甚至可以通过单个连接发送多个请求,这样就避免了以后的请求的完整TCP和SSL握手开销。
即使在某些黑客尝试中被盗用,也必须始终对哈希进行散列以保护系统(或最大程度地减少损坏)。有许多这样的哈希算法可以证明对密码安全性非常有效,例如PBKDF2,bcrypt和scrypt算法。
用户名,密码,会话令牌和API密钥不应出现在URL中,因为可以在Web服务器日志中捕获它,这使得它们很容易被利用。
https://api.domain.com/user-management/users/{id}/someAction?apiKey=abcd123456789 //Very BAD !!
以上网址公开了API密钥。因此,切勿使用这种形式的安全性。
尽管基本身份验证对于大多数API来说已经足够好了,并且如果正确实现,它也很安全-但是您可能还需要考虑使用OAuth。 OAuth 2.0授权框架使第三方应用程序可以通过协调资源所有者和HTTP服务之间的批准交互,或者通过允许第三方应用程序代表资源所有者来获得对HTTP服务的有限访问权,或者代表资源所有者。代表自己获取访问权限。
连同其他请求参数,您可以在API请求中添加请求时间戳作为HTTP自定义标头。服务器会将当前时间戳与请求时间戳进行比较,并且仅在合理的时间范围内(也许是1-2分钟)接受请求。这将防止试图强行使用您的系统而不更改此时间戳的人进行非常基本的重放攻击。输入参数验证
在到达应用程序逻辑之前的第一步,请验证请求参数。进行严格的验证检查,如果验证失败,则立即拒绝请求。在API响应中,发送相关的错误消息和正确输入格式的示例,以改善用户体验。
您可以在创建REST API时将其用作清单