如果我理解您的问题,您希望获得与 Uri 布局本身相关的建议。下面的建议专门与设计一个可以用来更改密码的 Uri 有关。
切勿在 URI 中以明文形式包含任何敏感信息,即使它来自 HTTPS,因为该信息可能会写入服务器上的日志文件,或者更糟的是,由分析或监控软件记录。确保敏感信息作为正文的一部分或标题的一部分发送。
以下是为什么使用 RESTfull 服务更改密码可能需要其自己的 Uri 的几个注意事项:
- 在更新用户详细信息时防止意外更改密码。
- 每当此方法发生更改时,您可能需要额外的安全审查,因为其中允许匿名用户更改现有用户密码的任何缺陷都将允许该匿名用户劫持帐户。
- 您可能还希望包含其他额外的安全功能,例如通知用户他们的密码已更改,并使应用程序发出的任何 OAuth 令牌无效。会员提供者很棒,但没有提供这种额外的措施。
- 由于它是不同的 Uri,因此您可以监控其使用情况并将其与 IP 地址相关联,从而检测是否有人试图入侵用户帐户。
您可以将数据合同放入https://example.com/users/{id}/password
:
[DataContract]
public class ChangePassword
{
[DataMember]
public string OldPassword { get; set; }
[DataMember]
public string NewPassword { get; set; }
}
后者假定您将授权客户端是否可以实际执行此操作。您可能想查看REST 中的 PUT 与 POST是否使用 PUT 或 POST。此外,在设计 RESTfull 服务(包括 Uri 布局)时,本书RESTful Web Services和REST API Design Rulebook对我来说非常宝贵。