[英]PHP - RESTful API for mobiles with authentication
我在这里找到了很多问题/答案,在其他网站上也找到了很多文章,但是仍然有一些问题需要我回答才能开始,而我只是找不到他们的答案。 我想为移动应用程序(和某些前端)创建Restful API。
我选择通过HTTPS进行基本身份验证,因为我想现在已经足够了,并且看起来很容易实现。 所以我应该在dabatase中保存用户名和哈希密码,对吗? 然后,当用户在应用程序中写入用户名和密码时,我对密码进行了哈希处理,并且都通过Base64加密并添加到HTTP标头,对吗? 我该如何解密并在服务器端检查数据库? 盐会如何变化?
在检查上一次呼叫的用户名和密码后,如何保存此会话? 我是否应该创建一些session-id/token
(随机字符串)并将其保存到users表中的列,然后将其发送回移动应用程序,然后用于其他调用(带有一些到期时间戳)? 可以通过HTTP(不安全)吗? 像web.com/api?token=ASsF234Silkj&data=...
还是在身份验证后必须始终使用HTTPS?
当我在所有使用此API的应用程序中使用一些API密钥(专用)时,它将如何改变? 我知道我可以隐藏密钥,并且不通过请求发送密钥(仅用于加密),但是如果有人尝试读取.apk
并获取API密钥怎么办?
所以我应该在数据库中保存用户名和哈希密码,对吗?
是的,您应该对其进行哈希处理,不要使用MD5或SHA1,因为它们现在已不再安全。 使用SHA2或SHA3。
然后,当用户在应用程序中写入用户名和密码时,我对密码进行了哈希处理,并且都通过Base64加密并添加到HTTP标头,对吗?
Base64不是哈希函数,您可以从base64获取原始内容 ,这只是一种编码方式。是的,您必须将凭据放入HTTP标头。 在发送用户名和密码(哈希或普通密码)时,请使用HTTPS连接。 在HTTP连接中发送哈希很容易受到重放攻击 。
我该如何解密并在服务器端检查数据库? 盐会如何变化?
如果发送Hash,则无法对其进行解密(这仅是Hash的目的)。 我建议您执行以下操作:1)通过https将用户名和密码发送到服务器2)在服务器上创建哈希,并检查数据库中的现有哈希。
在检查上一次呼叫的用户名和密码后,如何保存此会话?
取决于您使用的是哪种语言
我是否应该创建一些会话ID /令牌(随机字符串)并将其保存到users表中的列,然后将其发送回移动应用程序,然后用于其他调用(带有一些到期时间戳)? 可以通过HTTP(不安全)吗?
您可以这样做,但是可以使用HTTPS,并且不使用时间戳,这是非常不安全的。 而是生成长随机字符串
当我在所有使用此API的应用程序中使用一些API密钥(专用)时,它将如何改变?
???
我知道我可以隐藏密钥,并且不通过请求发送密钥(仅用于加密),但是如果有人尝试读取.apk并获取API密钥怎么办?
不要将密钥放入APK,如果它是私钥则在本地生成(如果我明白了你的意思)
首先, base64 不加密
虽然可以将基本的HTTP身份验证与会话集成在一起,但这并不是一件容易的事。 而且很容易得出不安全的结论(尤其是从问题中证明的技能水平来判断)。
您似乎已经计划了要实现的大多数功能-但是您已经错了很多。
身份验证后是否应继续使用HTTPS取决于您的服务是否具有任何内在价值。
同样,如何实现代理身份验证令牌(包括API密钥)取决于安全模型。 坚持在所有地方使用HTTPS,您不必担心更改/加密API密钥。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.