Bob*_*bby 12 java rest spring web-services spring-security
我正在使用Spring Security在Grails应用程序中托管REST Web服务,即:
@Secured(['IS_AUTHENTICATED_REMEMBERED'])
def save = {
println "Save Ride REST WebMethod called"
}
Run Code Online (Sandbox Code Playgroud)
我是从Android应用程序调用它.(调用不安全的服务工作正常.)
要调用该服务,我手动构建一个request(HttpUriRequest)并使用一个执行它HttpClient.
我想知道最佳实践是什么,以及如何实现它们......具体来说,我应该:
我想我可以选择1工作,但我不确定Spring Security是否允许(2),如果这是要走的路......谢谢!
- 而且,没有任何我想念的图书馆会为我做这一切吗?:)
Dav*_*rks 10
Spring安全性确实支持基本身份验证和基于表单的身份验证(在URL中嵌入用户名/密码).
REST服务通常在每个请求上进行身份验证,通常不是通过会话进行身份验证.默认的spring安全身份验证(假设您使用的是3.x)应查找基本身份验证参数或表单参数(j_username和j_password)(格式为http://you.com/rest_service?j_username=xyz&j_password=abc).
手动将j_username/j_password添加到URL上,将它们添加为post参数(我相信),或者设置基本身份验证用户名/密码都应该可以使用默认的Spring Security拦截器来验证REST服务.
我承认我还没有在REST服务上尝试过这个,尽管我确实清楚地记得在文档中读到这一点,因为我最近对Spring安全性的基本页面登录做了同样的事情.免责声明.
我认为你可以使用类似于oauth工作方式的login-once-and-get-a-token方法.
在安全通道(https/ssl)之外通过网络发送用户名和密码是一个糟糕的主意.网络上的任何人都可以嗅探您的请求包并查看明文密码.
另一方面,如果使用令牌方法,由于令牌字符串是随机生成的,即使令牌被泄露,最坏的情况是有人可以使用访问REST API的令牌.
另一种解决方案是通过ssl隧道(HTTPS).我实际做了一个比较,结果显示:80个请求/分钟(https)vs 300个请求/分钟(http)
| 归档时间: |
|
| 查看次数: |
20207 次 |
| 最近记录: |