0

我正在用 PHP 编写 REST API,最近遇到了授权问题。我阅读了很多关于基本授权的内容,关于使用私钥和公钥创建请求签名的内容。据说使用请求签名更安全。但后来我有一个问题:

- 用户应该如何传递公钥和生成的签名?

我正在考虑几个选项:

1) 创建自定义 http 标头,例如 X-Key、X-Signature

2)使用带有自定义方案的授权标头,例如

AUTHORIZATION: SIGNATURE key='123' signature='abc'

3) 将此值作为参数发送。但我不知道 DELETE 和 PUT 方法是否可以接受

你有什么建议?

ps 我不想实现 oAuth

4

1 回答 1

0

认证方案的期望属性是什么?这是可公开访问的还是 Intranet 服务?用户帐户是否链接到您的 API 范围之外的内容(链接的第 3 方帐户等)。您将如何分发用户凭据?

我可能会坚持使用普通的旧基本授权,但在传输级别加密所有内容,强制使用 HTTPS。推出自己的加密方案通常不是一个好主意。成为计时或重放攻击的受害者比看起来更容易。如果您坚持客户端使用密钥对进行身份验证,则可以使用 HTTPS 客户端证书(尽管这并未广泛使用并且可能有些麻烦的解决方案)。

TLS 上的纯文本身份验证存在一些安全问题。首先,如果有人使用众所周知的 CA(可能是政府机构)或客户被迫信任的 CA(大型邪恶公司代理)使用伪造证书实施 MITM,他们将获得凭据。但是无论如何,您都无法保护客户端免受其自身环境的影响。其次,基本身份验证容易出现 CSRF,因为浏览器知道如何进行,并且如果您提出挑战并且用户填写了表单,则可以记住凭据。如果您遵守 REST 原则并且绝不允许更改状态的 GET 请求,这不是一个大问题。此外,如果您使用的是 JSON,则永远不要返回数组

于 2013-08-02T11:21:34.347 回答