Android 如何为移动应用程序保护RESTAPI?

Android 如何为移动应用程序保护RESTAPI?,android,iphone,django,rest,Android,Iphone,Django,Rest,我正在尝试为一个移动客户端向Django添加一个REST接口。移动客户端将通过HTTPS使用JSON。我一直无法找到“最佳”方法来实现移动设备的这一点。环顾四周,似乎#2更有利于#1: 使用HTTP身份验证并建立基于cookie的会话。所有事务都将通过HTTP进行,JSON消息只包含命令或数据 在每个JSON消息中为所有事务传递用户名和密码(加密),不要依赖基于cookie的会话 第2个更好,如果可能的话,我建议使用OAuth身份验证,而不是您自己的身份验证。客户机和服务器库现在都可以在大多数平

我正在尝试为一个移动客户端向Django添加一个REST接口。移动客户端将通过HTTPS使用JSON。我一直无法找到“最佳”方法来实现移动设备的这一点。环顾四周,似乎#2更有利于#1:

  • 使用HTTP身份验证并建立基于cookie的会话。所有事务都将通过HTTP进行,JSON消息只包含命令或数据
  • 在每个JSON消息中为所有事务传递用户名和密码(加密),不要依赖基于cookie的会话

  • 第2个更好,如果可能的话,我建议使用OAuth身份验证,而不是您自己的身份验证。客户机和服务器库现在都可以在大多数平台上使用。查看详细信息。

    除非您想让其他开发人员可以使用这些服务(他们将代表您的最终用户访问这些服务),否则OAuth就太过了。最好使用选项2,但我建议使用摘要身份验证,而不是密码身份验证。将其与SSL结合起来,您肯定可以使用。

    只要您使用的是实际的加密,而不是base64或一些自制的模糊算法,#2就可以了。您可能还想考虑许多公司采取的路由,它将API密钥绑定到用户名。

    < P>我建议首先用登录调用发送用户名/密码。JSON将传回一个authToken或accessToken,移动设备将为所有后续调用发回该authToken或accessToken。然后,您将检查以确保authToken有效。这是许多API采用的方法。在他们的数据库中,他们会将API密钥绑定到他们登录的用户帐户。

    我肯定会从上面提到的誓言网站的“入门”部分开始。它有很多OAuth信息的链接。如果所有信息都用SSL发送,加密是否仍然是必要的?SSL是加密。它只是在通信堆栈的另一层进行加密——SSL加密整个通信通道,而不仅仅是特定消息的选定内容。因此,它通常更昂贵。两者兼而有之可能是浪费资源。谢谢。我喜欢这种方法。此截断类型是否有名称或其他我可以通过Google进一步搜索的内容?@ewitt它被认为是基于令牌的身份验证@Bot如果攻击者试图登录并获取令牌并使用令牌发出api请求,该怎么办?