我正在开发一个Android应用程序,它会消耗我将开发的Web服务(我正在考虑使用RESTFul Web服务)。 我想保护应用程序和服务器之间的连接,但我也需要对用户进行身份验证..
我的问题是在最后一部分,为了保证连接,我认为最好的方法是使用SSL(https),我错了吗?
我不知道对用户进行身份验证的“最佳方式”是什么,以确保用户无法将web服务作为其他用户使用。 我有一些想法,比如在返回令牌的webservice上使用authenticate(login,pass)方法。对于任何需要身份验证的操作,用户需要将该令牌作为参数传递..事情是,这是这样做的好方法?在这种情况下,用于授权用户的最常用技术是什么?
如果基于令牌的身份验证是一个好主意我应该如何生成令牌?
抱歉这篇长篇文章..
任何帮助都是有用的
由于
答案 0 :(得分:7)
确保您在走上这条道路之前了解像OAuth这样的时尚标准。大多数OAuth流程都以用户通过Web浏览器登录服务器为中心。这可能会导致移动应用的用户体验非常糟糕。该标准确实允许替代方案。这是a decent introduction。
您还可以使用Google,Facebook,Twitter等现有的身份提供商,而不是实施您自己的身份验证/身份验证。在Android上,您可以使用AccountManager申请Google身份验证令牌。这通常有效,因为用户需要登录其Google帐户才能访问Android电子市场。无论如何,这将提示用户授予您的应用程序授权。然后,您可以使用Google身份验证令牌使用您自己的令牌将您的用户登录到您的服务。登录本质上是您的服务器验证Google令牌有效(通过联系Google的服务器),然后发出自己的令牌用于调用您的Web服务。如果您不喜欢Google,可以使用Facebook SDK等
至于令牌的用途...... OAuth规范也有相关内容。你可以做一些简单的随机字符串或像加密SAML assertions那样复杂的事情。
答案 1 :(得分:2)
您应该实施基于令牌的OAuth,这将要求用户登录一次,然后永久访问。
您可以使用已为您提供用户身份验证服务的Google App Engine(您的Android用户很可能已经拥有Google帐户)但这只是众多选项中的一种。
您还可以查看Amazon's Identity Access Management (IAM),这样您就可以管理有权访问您的网络服务的用户,并相应地对其进行授权。
我认为最好的方法是使用SSL(https),我错了吗?
这只能阻止某些类型的恶意使用,但不会阻止所有内容。仍然没有什么可以阻止人们通过电话访问您的数据库,并以这种方式检索凭证。