Authentication 用于身份验证的REST服务设计

Authentication 用于身份验证的REST服务设计,authentication,rest,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&newPa

我想设计用于身份验证和帐户管理的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

HTTP方法POST&PUT是否在这里?既然身份验证不会修改任何内容,那么使用GET-here是否更好?我很困惑。

不要那样做。无论出于何种原因,都不要将密码放在URL中

在本例中,我对您尝试执行的操作感到有点困惑——一般来说,REST API中的身份验证/授权不是由资源本身处理的,但是如果您正在设计一个单独的身份验证API,这可能是有意义的。简单的答案是,将身份验证数据放在请求主体中,并通过SSL发送它们。所以

 POST https://server/security/changePassword/
并将数据保存在正文中。并确保用户必须在您的服务中进行身份验证

从REST设计的角度来看,可以将POST看作是在主体上执行操作的服务。理想情况下,让它用200/201状态和带有已创建/修改资源URL的位置头进行响应

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

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

GET https://server/security/{username}/{email}/forgottonPassword/
但这有点滥用。。。坚守岗位

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


在这种情况下,进行用户名/密码身份验证的标准restful方法称为

不要这样做。无论出于何种原因,都不要将密码放在URL中

在本例中,我对您尝试执行的操作感到有点困惑——一般来说,REST API中的身份验证/授权不是由资源本身处理的,但是如果您正在设计一个单独的身份验证API,这可能是有意义的。简单的答案是,将身份验证数据放在请求主体中,并通过SSL发送它们。所以

 POST https://server/security/changePassword/
并将数据保存在正文中。并确保用户必须在您的服务中进行身份验证

从REST设计的角度来看,可以将POST看作是在主体上执行操作的服务。理想情况下,让它用200/201状态和带有已创建/修改资源URL的位置头进行响应

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

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

GET https://server/security/{username}/{email}/forgottonPassword/
但这有点滥用。。。坚守岗位

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


在本例中,当您在参考资料中对REST样式的服务进行建模时,进行用户名/密码身份验证的标准REST方式称为

。资源是
用户
。您想要公开的服务(不好,因为在服务中思考会强制使用RPC样式)是身份验证和获取安全令牌(稍后可在授权HTTP头中使用)、忘记密码和更改密码功能

首先,我们对资源用户进行建模,该用户在基本URL下总是可访问的

https://server/user/{username}
为了进行身份验证,我们需要一些安全令牌,以便我们可以向创建安全令牌的用户的子资源发出POST:

POST https://server/user/{username}/securityToken
这将发出一个新的安全令牌,我们可以在HTTP授权头中使用它。我在这里发出一个
POST
请求,因为我们将securityToken建模为user
user/someusername/securityToken
的某种子资源。您可以使用在安全令牌下创建的子资源向用户公开功能,以查看所有成功或失败的登录请求

接下来我们要请求一个忘记的密码。这里最重要的是
请求
。这意味着我们发出一个请求,并为用户创建一个新的密码遗忘请求子资源。对于创建子资源,REST样式使用
POST

POST https://server/user/{username}/password/request
这可以(但不是必须)为每个密码请求创建一个子资源,该子资源只有在经过身份验证时才可访问。因此,您可以公开一个REST样式的URL,用户可以在其中获得随时间发出的所有密码请求

更改密码的最后一个功能现在非常简单,因为我们有用户的密码子资源,我们可以对密码资源发出
POST
请求:

POST https://server/user/{username}/password

在建模REST样式的服务时,您需要考虑参考资料。资源是
用户
。您想要公开的服务(不好,因为在服务中思考会强制使用RPC样式)是身份验证和获取安全令牌(稍后可在授权HTTP头中使用)、忘记密码和更改密码功能

首先,我们对资源用户进行建模,该用户在基本URL下总是可访问的

https://server/user/{username}
为了进行身份验证,我们需要一些安全令牌,以便我们可以向创建安全令牌的用户的子资源发出POST:

POST https://server/user/{username}/securityToken
这将发出一个新的安全令牌,我们可以在HTTP授权头中使用它。我在这里发出一个
POST
请求,因为我们将securityToken建模为user
user/someusername/securityToken
的某种子资源。您可以使用在安全令牌下创建的子资源向用户公开功能,以查看所有成功或失败的登录请求

接下来我们要请求一个忘记的密码。这里最重要的是
请求
。这意味着我们发出一个请求,并为用户创建一个新的密码遗忘请求子资源。对于创建子资源,REST样式使用
POST

POST https://server/user/{username}/password/request
这可以(但不是必须)为每个密码请求创建一个子资源,该子资源只有在经过身份验证时才可访问。因此,您可以公开一个REST样式的URL,用户可以在其中获得随时间发出的所有密码请求

更改p的最后一个功能