Android 我应该使用什么来保护REST Web服务中的参数
我想开发一个身份验证web服务,它可以在android应用程序中用于登录和访问其他服务。因此,基本上我通过HTTP请求发送凭据,并在一切正常的情况下授予用户访问权限。我需要保护这些凭据,以便它们不会被不需要的用户拦截 我将eclipse与Tomcat7一起使用,Jersey用于我的rest Web服务,spring和hibernate。 我的网络服务是这样的Android 我应该使用什么来保护REST Web服务中的参数,android,web-services,security,rest,jersey,Android,Web Services,Security,Rest,Jersey,我想开发一个身份验证web服务,它可以在android应用程序中用于登录和访问其他服务。因此,基本上我通过HTTP请求发送凭据,并在一切正常的情况下授予用户访问权限。我需要保护这些凭据,以便它们不会被不需要的用户拦截 我将eclipse与Tomcat7一起使用,Jersey用于我的rest Web服务,spring和hibernate。 我的网络服务是这样的 @GET @Path("/login/{id}/{pass}") @Produces(MediaType.TEXT_HTML) publi
@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> ";
}
@GET
@路径(“/login/{id}/{pass}”)
@生成(MediaType.TEXT\u HTML)
公共字符串登录(@PathParam(“id”)int-id、@PathParam(“pass”)字符串pass){
String res=“空参数”;
如果(id!=0&&!pass.isEmpty())
{
试一试{
User=service.getOne(id);
if(user.getPass().equals(pass))
res=“成功”;
其他的
res=“失败”;
}
捕获(例外e){
res=“未找到用户”;
}
}
返回“+”+“结果”+“
+“+res+”+“+”;
}
我正在用它来测试浏览器,我还没有开始编写客户端代码
我真的很抓狂,我一直在网上浏览,一些人在谈论OAuth 2.0,另一些人在谈论HMAC,我不知道该用哪一种,如果有其他方法,请告诉我
如果您知道关于如何在我的项目中实现安全性的有用教程,那就太好了,欢迎您提供任何其他建议。非常感谢通常通过post请求发送用户名和密码,这会对用户隐藏用户名和密码。。如果有人站在你身后,如果他们能看到url,那么他们就能看到你的用户名和密码,这很好。。。除此之外,请在服务器端使用SSL 这实际上取决于应用程序所需的安全级别 有很多复杂的安全系统,但对于大多数应用程序来说,这些都是相当过分的 如果您只是在寻找一些基本的密码保护,而不需要处理付款或真正敏感的数据,那么您可以做以下简单的事情
另外,不要认为使用“post”而不是“get”是一种安全措施,从安卓的角度来看,使用哪种安全措施并不重要。人们无论如何都必须使用一个程序来获取网络连接,才能看到链接(根据WireShark的例子),而且读取GET参数和读取POST参数一样简单 上面的一些答案,甚至问题本身,都有点混乱。一些注意事项:
- 首先,REST是无状态的。因此,您不应该具有设置某种服务器端标志的“登录”功能,而应该在每个请求中传递凭据
- 应该在筛选器中而不是在单个资源方法中处理凭据。有很多关于堆栈溢出的例子说明了这一点
- 如果要在服务器上存储密码,请使用BCrypt对其进行散列。Bcrypt允许您拨出计算散列所需的时间,因此提供了一些针对摩尔定律的未来证明措施
- 所有通信都应使用HTTPS。它为您提供了另一层安全性和保护,而且成本低廉(无论如何,编程工作是明智的)
- 如果您想保护请求中的信息不被篡改,那么您应该查看以下内容。这使您能够保护请求头和主体免受篡改,还可以作为身份验证机制
要正确保护REST端点,还有很多方法,但如果您遵循上述方法,您将抓住要点。是的,我知道GET方法不正确,POST方法更好,因为它隐藏了参数。但我需要加密发送这些参数,SSL够了吗?我认为哈希对我的应用程序来说就足够了,我不需要FBI那样的保护,这是关于办公室订单(邮件服务)的。我会查的。谢谢你是的,就像我大多数时候说的,这就足够了。互联网上有很多针对Android/Java md5/sha1哈希的复制粘贴解决方案。祝你好运:)