我正在开发几个将由移动应用程序访问的Web服务。我有几个要求:
我们假设OAuth不是一个选项。
为了确保Web服务请求仅来自移动应用程序,我计划在IIS中使用HTTP基本身份验证(移动应用程序需要在Windows Server中设置用户帐户)移动应用程序需要存储用户名和密码,并在标题中传递这些内容。
接下来是每个Web服务请求的用户身份验证。是否适合使用AES-256加密用户ID,密码和某些共享密钥(" pepper",排序),将该加密字符串作为参数传递给每个请求(通过HTTPS,当然),然后解密并解析它在服务器上进行身份验证?这是现有的计划,但有些事情似乎并不合适 - 就像它没有足够的安全和#34;
我还可以做些什么来正确验证用户的Web服务请求?
答案 0 :(得分:2)
我最近遇到了这个问题,并询问了一群资深人士对他们如何解决问题的意见。意见各不相同,但一致的感觉是您的安全级别取决于您的应用程序的用例。你在做网上银行还是存储医疗记录?那么您的安全需求可能会非常高。社交网络?也许没那么多。
通过SSL加密时,基本身份验证通常很好,ColdFusion可以很好地使用它。如果您使用基本身份验证,请确保使用1024位或更高密钥加密流量。不要使用用户名/密码验证每个请求 - 这是不必要的。验证第一个请求,设置会话令牌,并依赖会话令牌来识别用户。
设置从客户端到服务器的轮询机制以使会话保持活动状态 - 例如,将会话超时设置为30分钟,将轮询频率设置为25分钟。否则,您可能需要重新验证过期的会话。同样,您如何处理解决方案的这一部分取决于您的偏执级别,这取决于您正在处理的数据/应用程序类型。
Cookie以及会话应该可以在iOS应用中正常运行。如果在身份验证后使用会话验证身份,请确保会话cookie仅限内存(在服务器级别设置)。
根据Qualysis SSL Test检查服务器的SSL实施:
https://www.ssllabs.com/ssltest/
该报告将为您提供有关SSL实施强度的惊人详细信息。
最后,考虑实施双因素身份验证以防止密码被盗。
如果您忽略SSL建议并计划加密密码并通过不安全的渠道进行通信,请查看Kerberos协议,了解如何安全地进行身份验证的着名示例:
答案 1 :(得分:1)
是的,您可以使用基本身份验证,但这意味着客户端需要以纯文本格式存储用户名/密码,并以纯文本形式发送。如果它在HTTPS下发送部分很好,但是以纯文本形式存储用户名/密码可能不是一个好主意,除非你使用一些安全的密钥库。
假设您已经确定基本身份验证是最佳选择,并且您希望使用官方CF支持方式,那么您可以使用CFLOGIN.name
& CFLOGIN.password
。您也可以查看Ask Ben: Manually Enforcing Basic HTTP Authorization In ColdFusion。在远程cfc端,始终验证用户名/密码,或返回某种令牌并要求客户端继续使用该令牌。如果你愿意,令牌可以是cfid + cftoken,或者甚至可以滚动自己永不过期的令牌。如果您使用cfid + cftoken,并将其作为cookie或身体内容与您的网络服务电话一起发送,我相信如果您愿意,可以恢复会话。