在REST API中自定义使用Authorization标头


10

我正在构建一个REST api,其中使用客户端证书对客户端进行身份验证。在这种情况下,客户端不是单个用户,而是某种表示层。使用自定义方法对用户进行身份验证,表示层有责任确保此方法正确完成(注意:我知道这不是正确的方法,但api不公开)。

我想传递每个请求的用户名(而不是密码),但是我不确定在哪里执行此操作。使用Authorization标头是个好主意吗?

Answers:


21

使用Authorization标头似乎是正确的事情。这是Authorization标头的全部用途。

http://tools.ietf.org/html/rfc7235#section-4.2

“授权”标头字段允许用户代理通过源服务器对自身进行身份验证-通常但不一定是在收到401(未经授权)响应之后。它的值由凭证组成,凭证包含用于所请求资源领域的用户代理的身份验证信息。

如果您有自己的身份验证方案文档,则无需重新发明轮子。


3
它不只是看起来像正确的事情,这正确的事情。(我整天都在研究)RFC 7235中的4.1节明确演示了在“实例”中使用自定义方案“ Newauth”以及标准方案“基本”的使用,该方案允许客户端使用他们选择的任何一种方案。就是说,如果您使用的是“标准”方案,则应正确使用它。Zach的答案是正确的,而Filip的答案是错误的
Stephen P

3

我不建议您非标准地使用标准HTTP标头。主要是因为它可能会误导其他知道AuthoriziationHTTP身份验证应如何使用标头的开发人员,而且还可以避免堆栈中其他部分对同一请求标头的意识有冲突的任何潜在问题。

无论如何,都没有阻止您使用自定义非标准标X-Authorization-User头的专用信息。


100%同意。如果您想自定义某项内容,那就是X-带有前缀的标头。如果要使用标准标头,请不要将其用于任何异常或意外情况。
Carson63000

2
只是觉得我应该提到的是,“X-”已被弃用:stackoverflow.com/questions/3561381/...
Matsen75

根据此答案,是否表示Amazon S3做错了?docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
Tom Lianza 2014年

4
-1。正如Zach Dennis所提到的,与大多数其他HTTP标头不同,Authorization标头被设计为可扩展的,并且有一种明确规定的方式来定义您自己的授权方案。简而言之,只需确保使用自定义授权方案名称即可。
Lie Ryan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.