我想知道在执行登录请求时我应该使用哪种http方法,为什么?由于此请求在服务器上创建了一个对象(用户会话),我认为它应该是POST,你怎么看?但由于登录请求应该是幂等的,它可能是PUT,不是吗?
注销请求的相同问题,我应该使用DELETE方法吗?
答案 0 :(得分:47)
如果您的登录请求是通过提供用户名和密码的用户进行的,则最好使用POST,因为详细信息将在HTTP消息正文中发送,而不是URL。虽然它仍然会以纯文本形式发送,除非您通过https加密。
HTTP DELETE方法是删除服务器上的内容的请求。我不认为DELETING内存用户会话确实是它的意图;更多是删除用户记录本身。因此,注销可能只是一个GET,例如www.yoursite.com/logout。
答案 1 :(得分:25)
我相信你可以翻译LOGIN&将LOGOUT方法转换为基本的CRUD操作CREATE&删除。由于您正在创建名为SESSION的新资源并在注销时销毁它:
我绝不会因为只是因为任何人只是通过发送带有IMG标签的电子邮件或链接到存在这样的IMG标签的网站而进行攻击而进行攻击。 (<img src="youtsite.com/logout" />
)
P.S。 很长一段时间我想知道你将如何创建一个RESTful登录/注销,事实证明它非常简单,就像我描述的那样:使用 / session / 端点和CREATE和DELETE方法,你是精细。如果您想以某种方式更新会话,也可以使用UPDATE ...
答案 2 :(得分:4)
这是我的解决方案,它基于REST指南和建议:
登录 - 创建资源
请求:
POST => https://example.com/sessions/
BODY => {'login': 'login@example.com', 'password': '123456'}
回应:
http status code 201
{'token': '761b69db-ace4-49cd-84cb-4550be231e8f'}
退出 - 删除资源
请求:
DELETE => https://example.com/sessions/761b69db-ace4-49cd-84cb-4550be231e8f/
回应:
http status code 200
答案 3 :(得分:2)
关于注销方法:
在Spring(Java Framework)文档中,他们指出首选POST请求,因为GET使您容易受到CSRF的攻击,并且用户可能会注销。
添加CSRF会将LogoutFilter更新为仅使用HTTP POST。这样可以确保注销需要CSRF令牌,并且恶意用户不能强行注销您的用户。
登录还应使用POST(正文可以加密,请参见其他答案)。
答案 4 :(得分:0)
对于登录请求,我们应该使用POST方法。因为我们的登录数据是安全的,需要安全性。使用POST方法时,数据将以捆绑形式发送到服务器。但是在GET方法中,数据被发送到服务器,然后是url,就像追加url请求一样,每个人都可以看到。
因此,对于安全的身份验证和授权过程,我们应该使用POST方法。
我希望这个解决方案可以帮到你。
由于
答案 5 :(得分:0)
对于登录,我使用POST,以下是我的LOGIN方法代码 我将Nodejs与Express和Mongoose一起使用
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/application_6.xsd"
version="6">
<display-name>TutorialGwt</display-name>
<module>
<web>
<web-uri>tutorial_gwtapp.war</web-uri>
<context-root>/tutorial_gwtapp</context-root>
</web>
</module>
<module>
<ejb>tutorial_ejb.jar</ejb>
</module>
<!--@includes-->
</application>