Java 从Android调用使用Spring安全性保护的REST web服务
我正在Grails应用程序中使用Spring Security托管REST web服务,即:Java 从Android调用使用Spring安全性保护的REST web服务,java,web-services,spring,rest,spring-security,Java,Web Services,Spring,Rest,Spring Security,我正在Grails应用程序中使用Spring Security托管REST web服务,即: @Secured(['IS_AUTHENTICATED_REMEMBERED']) def save = { println "Save Ride REST WebMethod called" } 我在安卓应用程序中调用它。(调用不安全的服务就可以了。) 要调用该服务,我需要手动构建一个请求(HttpUriRequest),并使用HttpClient执行它 我想知道什么是最佳实践,以及如何实施
@Secured(['IS_AUTHENTICATED_REMEMBERED'])
def save = {
println "Save Ride REST WebMethod called"
}
我在安卓应用程序中调用它。(调用不安全的服务就可以了。)
要调用该服务,我需要手动构建一个请求(HttpUriRequest
),并使用HttpClient
执行它
我想知道什么是最佳实践,以及如何实施它们。。。具体而言,我是否应该:
我承认,我还没有在REST服务上尝试过这一点,尽管我确实清楚地记得在文档中读到过这一点,就像我最近在spring security上对基本页面登录所做的一样。免责声明结束。我认为您可以使用类似于oauth工作方式的登录一次并获取令牌方法 在安全通道(https/ssl)之外通过网络发送用户名和密码是一个糟糕的主意。网络上的任何人都可以嗅探您的请求包并查看明文密码 另一方面,如果您使用令牌方法,因为令牌字符串是随机生成的,即使令牌被破坏,最坏的情况是有人可以使用令牌访问您的RESTAPI
另一个解决方案是通过ssl隧道(HTTPS)。事实上,我做了一个比较,结果显示:80个请求/分钟(https)与300个请求/分钟(http)非常感谢你的回答,这很接近(这些想法帮助很大),但不是开箱即用的-我发表了一篇关于如何使其工作的帖子:这是一篇很棒的帖子,感谢你的贡献,我相信它会被发现并对很多人有用。在URL中输入用户名和密码通常被认为是个坏主意。Web服务器日志文件通常包含将公开您的凭据的查询参数。任何从浏览器访问RESTful服务的人都会在其历史记录中公开凭据。