我听说了RESTful API should be stateless. All state info should be kept on client side.
但是当我从网页发出ajax调用时,我注意到会话ID cookie总是被发送到服务器.使用该会话ID,我可以在服务器上获取会话对象.因此,我可以get/set some state info in the session.
这会破坏code of being statelessRESTful API吗?
(我的问题的背景如下.)
我尝试通过调用RESTful API来实现登录页面以验证用户名和密码.
每次用户尝试访问我的站点的页面时,登录servlet filter将检查该用户的session(这是getSession()被调用的地方),以查看是否存在有效的登录信息.如果没有,登录过滤器会将用户重定向到登录页面.
在登录页面上,使用用户名和密码对服务器上的RESTful API进行ajax调用.根据RESTful API的返回结果,页面上的JavaScript将决定是否让用户进入我的网站.
所以,在这种情况下,我有点必须使用session.
详细代码位于此处: 此登录逻辑是否通过RESTful呼叫声音?
虽然我"想"我理解它,但我需要一些清晰度.使用PURE Restful身份验证,事情确实变得有点笨拙,使用表单对应用程序的UI有很大帮助(即,获得单独的登录页面,忘记密码链接,更容易注销?等等)
现在表格出现了,有些人说"不安宁" - 对他们来说"不安宁"是什么?难道没有相应的登录资源可以这么说吗?还是它会强迫我失踪的其他东西?
注意:如果有人与他们创建会话,那就完全不同了.我更热衷于知道"为什么"他们被称为宁静?谷歌搜索"基于表单的身份验证与静态身份验证"会引发不少命中.
可以使用这些"表单"来验证和传递令牌以便应用程序存储在cookie等中,我觉得这完全是宁静的(假设加密安全等等),...
我有Spring REST webserivce现在从移动客户端Web服务被调用.首先,根据发送的值userid和password调用login方法登录成功或失败.
@RequestMapping(value = "/login", method = RequestMethod.POST, headers="Accept=application/json")
public @ResponseBody List<LogInStatus> getLogIn(@RequestBody LogIn person , HttpServletRequest request) {
// Call service here
List<LogInStatus> lList = logInService.getUser(person);
//service method and then in DAO database method is there
return lList;
}
Run Code Online (Sandbox Code Playgroud)
现在,对于许多其他调用,我需要登录基于用户的值,因此需要保持会话并需要获取当前用户.在注销调用时,需要销毁会话.如何做到这一点并实现,请帮助提出想法.
在我读完这篇文章后,这个问题在我脑海中 浮现:"常见的REST错误:会话无关紧要"
如果在RESTful应用程序中确实不鼓励会话.您将如何处理此类申请中的许可证.我特指的是并发许可证模型,而不是命名许可证.即客户购买X许可证,这意味着应用程序可以允许最多X个用户同时登录.这意味着应用程序必须为当前登录的用户保持状态.
我知道我可以创建一个名为licenses的资源,它将设置一个cookie或生成一个唯一的ID,然后客户端必须在每次请求时发送它.但它与创建会话相同,对吧?
如果我采用无状态方法并要求客户端为每个请求创建一个身份验证令牌,应用程序将如何知道何时为该客户端使用和释放许可证?
还有其他选择吗?特别是一个更RESTful的替代品?
大约一年前,我问过这个问题:你能帮我理解一下吗?"常见的REST错误:会话无关紧要".我的问题基本上是这样的:
好的,我得到HTTP身份验证是在每条消息上自动完成的 - 但是如何?是否每次请求都会发送用户名/密码?那不就是增加攻击面积吗?我觉得我错过了这个难题的一部分.
我收到的答案在移动(iPhone,Android,WP7)应用程序的上下文中非常有意义 - 在与REST服务交谈时,应用程序只会发送用户凭据以及每个请求.这对我很有用.
但是现在,我想更好地理解如何保护类似REST的网站,比如StackOverflow本身或像Reddit这样的东西.如果是用户通过网络浏览器登录而不是通过iPhone应用程序登录,情况会怎样?
我会坦率地说:我对网站安全性的理解非常有限,我不是网络开发人员(Damnit Jim,我是桌面开发人员!).我喜欢从应用程序角度使用REST服务,但现在我想尝试构建一个基于REST原则的网站,我发现自己很丢失.
如果上述问题中有任何内容不清楚您是否希望我澄清,请发表评论,我会解决.
我正在使用WCF服务(通过WebGet属性).
我正在尝试从WCF服务访问Session,但HttpContext.Current为null
我添加了AspNetCompatibilityRequirements并编辑了web.config但我仍然无法访问会话.
是否可以一起使用WebGet和Session?
谢谢!
我正在构建一个基于Spring的宁静Web服务.我正在使用Spring Security.它只能由桌面应用程序访问.基本上是机器到机器的Web服务.
我想要一个进行身份验证的自定义服务.然后根据身份验证的结果执行其他更敏感的操作.
另一个选择是在每个请求的正文中发送凭据,并且每次基本上都进行身份验证.
Logic说第一种方法效率最高,因为每次验证都有相当多的开销.
你有什么建议与此有关?去无国籍或有状态?有状态方法是否存在主要缺点?
到现在为止,我读了一些篇章的Java Web服务正常运行 ,也从SO这样几个问题,如本.