Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
安全的RESTful API,可供Web应用程序(angular)、iOS和Android使用_Android_Iphone_Oauth_Flask_Restful Authentication - Fatal编程技术网

安全的RESTful API,可供Web应用程序(angular)、iOS和Android使用

安全的RESTful API,可供Web应用程序(angular)、iOS和Android使用,android,iphone,oauth,flask,restful-authentication,Android,Iphone,Oauth,Flask,Restful Authentication,我必须制定一个计划来开发一个RESTful API(Python/Flask),它可以被我们未来的web应用程序(Angularjs)和移动应用程序(iOS/Android)使用 我已经研究了三天,遇到了几种情况: 使用HTTPS是在以下方法之上保持安全的一种方法。但https速度较慢,这可能意味着我们需要更快、更昂贵的服务器 使用基本Http身份验证,并为每个对API的请求通过线路发送普通(https)用户名/密码 使用Digest Auth,这是密码的散列,跟踪将是自动的,这将适用于web应

我必须制定一个计划来开发一个RESTful API(Python/Flask),它可以被我们未来的web应用程序(Angularjs)和移动应用程序(iOS/Android)使用

我已经研究了三天,遇到了几种情况: 使用HTTPS是在以下方法之上保持安全的一种方法。但https速度较慢,这可能意味着我们需要更快、更昂贵的服务器

  • 使用基本Http身份验证,并为每个对API的请求通过线路发送普通(https)用户名/密码
  • 使用Digest Auth,这是密码的散列,跟踪将是自动的,这将适用于web应用程序,但我无法确认iPhone和Android是否会在本机支持此功能。如果他们这样做,那可能是一个简单的解决方案
  • 使用自定义http头,在成功的身份验证后,我将在http头中发送自定义身份验证字符串。但是,我必须确保为用户发出的每个请求发送此验证代码。这与1)完全相同,不同之处在于不使用普通密码,身份验证代码可能会在没有任何风险的情况下过期。还有一个问题是对身份验证代码的跟踪,它不再像2)中那样自动化
  • 使用OAuth是一种选择。但是它很难设置。如果没有更好的办法,也许那是唯一的办法
  • 如本文所述,保护类似AmazonS3的API。简而言之,他说服务器和客户端都知道一个私钥,他们将使用它来散列通信。这就像是匪徒握手,你只会相信送货员,如果他知道匪徒握手的话。进一步往下看有人问的评论:
  • 如何在纯HTML5应用程序中保持私钥的“安全”

    你完全正确;在纯HTML5(JS/CSS/HTML)应用程序中, 没有办法保护钥匙。你会把所有的沟通都做一遍 在这种情况下,您不需要密钥,因为您可以安全地使用HTTPS 使用标准API_密钥或其他友好的 不需要HMAC或其复杂性的标识符

    因此,换句话说,对于一个web应用程序来说,首先使用这种方法是毫无意义的。老实说,我也不明白这在移动设备上应该如何工作。用户下载我们的应用程序,我如何将私钥从iphone发送到服务器?一旦我转移它,它就会被破坏

    我研究得越多,就越犹豫不决


    我希望问一些以前做过这项工作的专业人士,他们可以分享他们的经验。非常感谢https,它速度较慢,但不是一个非https。 只有握手慢一些。对我们来说,最大的问题是维护服务器移动端的密钥对和权限。 我们还实现了一个消息摘要。问题是:很难正确设置php android ios版本。完成后(一个参数需要改变谷歌最初在android端的结果),问题将出现在低端设备上:CPU使用率太高,解密-加密过程慢,比https慢很多,特别是当需要转换10kb字符串时(可能需要几分钟)


    如果我不将Nasa的数据传输给哈马斯,我会使用简单的HTTP进行非常简单的加密:比如反转位等等…

    使用HTTPS。它(稍微)慢一些,但是您在相对较短的投资时间(购买SSL证书并将URL从http更改为https)中获得的安全性是值得的。如果没有HTTPS,您的用户会话就有可能在不安全的公共网络上被劫持,这是非常危险的。

    您似乎混淆了/合并了两个不同的概念。我们开始讨论加密流量(HTTPS),然后讨论管理经过身份验证的会话的不同方法。在安全应用程序中,这些任务不是相互排斥的。此外,还可能存在一种误解,即会话管理如何影响身份验证。基于此,我将提供有关web应用程序/web api会话管理、身份验证和加密的入门知识

    介绍 会话管理

    默认情况下,HTTP事务是无状态的。HTTP不指定任何方法让应用程序知道HTTP请求已从特定用户(无论是否经过身份验证)发送

    对于健壮的web应用程序,这是不可接受的。我们需要一种方法来关联跨多个请求发出的请求和数据。为此,在向服务器发出初始请求时,需要为用户分配一个“会话”。通常会话具有某种发送到客户端的唯一id。客户端在每个请求中发送会话id,服务器使用每个请求中发送的会话id为用户正确准备响应

    重要的是要记住,“会话id”可以被称为许多其他东西。其中的一些示例有:会话令牌、令牌等。为了保持一致性,我将在本响应的其余部分使用“会话id”

    来自客户端的每个HTTP请求都需要包含会话id;这可以通过多种方式实现。常见的例子有:

  • 它可以存储在cookie中—当前域的cookie会在每次请求时自动发送
  • 它可以在URL上发送-每个请求都可以在URL上发送会话id,不建议这样做,因为会话id将保留在客户端历史记录中
  • 它可以作为HTTP头通过发送-每个请求都需要指定头
  • 大多数web应用程序框架都使用cookie。然而,依赖JavaScript和单页设计的应用程序可能会选择使用HTTP头/将其存储在服务器可以观察到的其他位置

    非常重要的一点是要记住,通知客户机会话id的HTTP响应和包含会话id的客户机请求