2013-03-27 84 views
0

确保参数我想开发验证的Web服务,它可以在一个Android应用程序可用于登录并访问其他服务。所以基本上,我通过HTTP请求发送凭据,并授予用户访问权限,如果一切顺利的话。我需要保护这些证书,以防他们被不需要的用户拦截。我应该使用什么样的REST Web服务

我使用日食与Tomcat的7号球衣给我休息web服务,Spring和Hibernate。 我的web服务是这样的

@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,我不知道该用哪一个,如果有另一个梅索德请告诉我。

如果你知道如何实现安全到我的项目也将是巨大的一个有用的教程,其他任何建议,欢迎。非常感谢

回答

2

这真的取决于安全的需要,为您的应用水平等。

有很多复杂的安全系统,但是对于大多数应用,这些都相当矫枉过正。

如果你只是去寻找密码的一些基本的保护,无需处理付款或真的是你可以做以下简单的事情敏感数据。

  1. 如果可以,请将您的服务移至https工作。所有的数据将被自动保护。

  2. 散列密码。很多语言都已经为简单哈希(如MD5和SHA1)提供了内置支持,如果不是,您可以通过谷歌实现它们,它们经常被使用。 这意味着即使你不知道管理员的真实密码。您只需将散列传递保存在数据库中,然后比较散列。

  3. 在您的客户端,盐添加到您的散列。也许如果你谷歌第2步,这将已经在那里,但否则它只是意味着你做一些像哈希(“132rjfASDF!”+密码“+ vnsadfr1!Z”);使其更加随机。可以很容易地实现

这些简单的步骤,快捷,并提供服务所需的全部时间的最安全。 如果您真的在处理付款和敏感数据等问题,那么您应该研究更严肃的解决方案。

ps。不要以为使用'post'而不是'get'就是任何一种安全性,从Android的角度来看,使用这种安全性并不重要。人们不得不使用程序来获取网络连接,以查看链接(每个示例WireShark),并且读取GET参数与读取POST参数一样简单。

+0

我认为散列对于我的应用程序已经足够了,我不需要像保护这样的联邦调查局,而是关于办公室命令(邮件服务)。我会看看那个。谢谢 – 2013-03-27 11:36:46

+0

是的,就像我说的大部分时间都足够好。 Android/Java md5/sha1 hash在互联网上有很多复制粘贴解决方案。祝你好运 :) – 2013-03-27 11:38:50

0

通常的用户名和密码发送彻底POST请求其隐藏它从用户..这是很好的柜面有人站在你的肩膀上,如果他们能看到的网址,然后他们可以看到你的用户名和密码...比使用SSL服务器端..

+0

是的,我知道GET方法是不正确的,POST是更好的,因为它隐藏参数。但我需要发送这些参数加密,是SSL足够? – 2013-03-27 11:29:59

1

上述答案中有一些混淆,实际上是问题本身。一些注意事项:

  • 首先,REST意味着无状态。因此,您不应该拥有设置某种服务器端标志的“登录”功能,而应该通过每个请求的凭证
  • 处理凭证应该在泽西岛中的过滤器而不是单个资源中完成方法。有堆栈溢出的各种示例显示此
  • 如果您在服务器上存储密码,然后使用BCrypt将它们散列。 Bcrypt允许您拨打计算散列所用的时间,因此提供一些针对摩尔定律的未来防范措施
  • 您应该对所有通信使用HTTPS。它为您提供了另一层廉价的安全和保护(无论如何,编程努力方面)
  • 如果您希望保护请求中的信息免遭篡改,那么您应该看看类似Hawk的内容。这使您能够保护您的请求头和身体被篡改的能力,并且还可以作为一种身份验证机制,以及

还有很多更妥善保护您的REST端点,但如果你按照上面的你会有主要的观点。

相关问题