我想开发一个身份验证Web服务,可以在Android应用程序中用于登录并可以访问其他服务。所以基本上我会通过HTTP请求发送凭据,并在一切正常时授予用户访问权限。我需要保护这些凭据,以免被不需要的用户拦截。
我正在使用eclipse与Tomcat 7,Jersey进行休息的webservices,spring和hibernate。 我的网络服务就是这样的
@GET
@Path("/login/{id}/{pass}")
@Produces(MediaType.TEXT_HTML)
public String login(@PathParam("id") int id,@PathParam("pass") String pass) {
String res="Null parameters";
if(id!=0 && !pass.isEmpty())
{
try {
User user = service.getOne(id);
if(user.getPass().equals(pass))
res="Success";
else
res="Fail";
}
catch (Exception e) {
res="User not found";
}
}
return "<html> " + "<title>" + "Result" + "</title>"
+ "<body><h1>" + res + "</body></h1>" + "</html> ";
}
我用它来测试浏览器,我还没有开始编写客户端代码。
我真的在这里摸不着头脑,我一直在网上看,有些人在谈论OAuth 2.0和其他关于HMAC的人,我不知道使用哪一个,如果还有另一种方法请让我知道。
如果您知道有关如何为我的项目实施安全性的有用教程,那将是非常好的,欢迎任何其他建议。非常感谢
答案 0 :(得分:2)
这实际上取决于您的应用程序所需的安全级别。
有许多复杂的安全系统,但对于大多数应用程序来说,这些都是相当过分的。
如果您只是在寻找密码的基本保护,而不处理付款或真正敏感的数据,您可以执行以下简单操作。
如果可以,请将您的服务移至https工作。所有数据都将自动受到保护。
哈希密码。许多语言都已经为MD5和SHA1之类的简单散列提供了内置支持,如果不是你可以谷歌他们的实现,他们经常被使用。 这意味着即使您作为管理员也不知道真实密码。您只需在数据库中保存散列传递,并比较哈希值。
在您的客户端,为您的哈希添加一个盐。可能如果你谷歌第2步,这已经在那里,但否则它只是意味着你做像哈希(“132rjfASDF!”+密码“+ vnsadfr1!Z”);使它更随机。
这些简单的步骤可以非常轻松快速地完成,并且可以为您的服务提供大多数时间所需的所有安全性。 如果你真的在处理支付和敏感数据等事情,你应该研究更严肃的解决方案。
PS。不要认为使用'post'而不是'get'是任何类型的安全性,从Android的角度来看,你使用它并不重要。无论如何,人们将不得不使用程序来获取网络连接以查看链接(按照示例WireShark),并且读取GET参数就像读取POST参数一样简单。
答案 1 :(得分:1)
上面的一些答案中存在一些混淆,实际上是问题本身。一些说明:
正确保护您的REST端点还有很多其他方法,但如果按照上述步骤进行操作,您将会遇到重点。
答案 2 :(得分:0)
通常用户名和密码都是通过邮寄请求发送给用户的......这很好,有些人站在你的肩膀上,如果他们能看到网址,那么他们就可以看到你的用户名和密码......除此之外在服务器端使用SSL ..