1

我有一些资源的服务器;到目前为止,所有这些资源都是由人类用户通过浏览器请求的,并且使用用户名/密码方法进行身份验证,该方法生成带有令牌的 cookie(以使会话打开一段时间)。

现在系统要求其他服务器向该资源服务器发出 GET 请求,但它们必须进行身份验证才能获取它们。我们一直在使用授权 IP 列表,但是有两种身份验证方法会使代码更加复杂。

我的问题是:

  • 是否有任何标准方法或模式可以使用相同的代码对人类用户和服务器进行身份验证?

  • 如果没有,我现在使用的方法是正确的,还是有更好/更标准的方法来完成我需要的?

提前感谢您的任何建议。

4

1 回答 1

1

我之前在我的 Web 服务中使用了基本身份验证和 cookie 的组合。在基本身份验证中,您传递在 HTTP 标头中编码的用户名/密码,它看起来像这样。

Authorization: Basic QWxhZGluOnNlc2FtIG9wZW4=

单词“Basic”后面的字符串是用冒号分隔的编码用户名和密码。REST API 可以从 HTTP 标头中获取此信息并执行身份验证和授权。如果身份验证失败,我会返回 HTTP Unauthorized 错误,如果他们已通过身份验证但未经授权,我会返回 HTTP Forbidden 错误,以区分身份验证失败与授权失败。如果它是 Web 客户端并且此人已通过身份验证,那么我会在 HTTP 标头中通过请求传递以下内容。

Authorization: Cookie

这告诉 Web 服务从 HTTP 请求中获取 cookie 并将其用于授权,而不是重新进行身份验证过程。

这将允许非 Web 浏览器的客户端使用相同的技术。客户端始终可以对每个请求使用基本身份验证,或者他们可以对初始请求使用基本身份验证,然后维护 cookie。此技术也适用于您没有单独登录页面的单页应用程序 (SPA) 。

注意:对用户名和密码进行编码安全性不够;您仍然想使用 HTTPS/SSL 来保护通信通道。

于 2012-11-19T16:42:13.533 回答