身份验证的REST服务设计

jak*_*aks 1 authentication rest

我想为身份验证和帐户管理设计REST服务.请让我知道以下是否满足REST风格.

POST http://server/security/authenticate?username=xxx&password=yyy
POST http://server/security/forgotPassword?username=xxx&email=yyy
PUT  http://server/security/changePassword?oldPassword=xxx&newPassword=yyy
Run Code Online (Sandbox Code Playgroud)

HTTP方法POST和PUT是否就在这里?由于身份验证不会修改任何内容,因此最好在此处使用GET吗?我很迷惑.

Ben*_*Ben 5

不要那样做.不要出于任何原因将密码放在URL中.

在这种情况下,我对你要做的事情有点困惑 - 一般来说,REST API中的身份验证/授权不是由资源本身处理的,但是如果你正在设计一个单独的身份验证API,也许这个说得通.简单的答案是,将身份验证数据放在请求正文中,然后通过SSL发送.所以

 POST https://server/security/changePassword/
Run Code Online (Sandbox Code Playgroud)

并拥有正文中的数据.并确保用户必须在您的服务中进行身份验证!

从REST设计的角度来看,将POST视为在主体上执行操作的服务.理想情况下,让它以200/201状态响应,并使用创建/修改资源的URL来定位Location标头.

当URL(而不是查询参数)包含要创建资源的位置时,将使用PUT.

可以说,这将是一个宁静的举动

GET https://server/security/{username}/{email}/forgottonPassword/
Run Code Online (Sandbox Code Playgroud)

但这有点滥用......坚持帖子.

如果您尝试对资源进行身份验证,则授权标头(错误名称,但要使用的标头)就是这些标头的位置.

在这种情况下,进行用户名/密码身份验证的标准休息方式称为基本身份验证