如何从 RESTful 服务发送安全令牌?

Posted

技术标签:

【中文标题】如何从 RESTful 服务发送安全令牌?【英文标题】:How to send secure token from RESTful service? 【发布时间】:2012-09-18 08:32:45 【问题描述】:

我正在使用 ASP.NET Web API 和基于自定义令牌的身份验证构建一个 RESTful 服务。客户端将在第一次调用时发送凭据。该服务将使用用户详细信息创建一个加密令牌,并且此令牌将从此时开始用于身份验证。现在服务需要将此令牌发送回客户端。最初,我将令牌保存在 HTTP 自定义响应标头中,以便客户端可以独立于服务返回的数据读取值。当客户端和服务在同一个域中时,这很有效,但在跨域场景中失败了。我启用了 CORS 并添加了各种标头,例如“Access-Control-Expose-Headers”、“Access-Control-Allow-Origin: *”等。但是跨域客户端无法读取自定义响应标头我创建的是“SecureToken:”。我在几篇文章中看到,Web 浏览器在跨域场景中读取自定义响应标头时存在一些问题。所以现在我正在考虑通过从服务发送的所有 ViewModel/数据对象的公共基类发送安全令牌。

在这种情况下,我有几个问题:

    发送自定义安全令牌的最佳位置是什么。它是在响应头中还是作为 ViewModel/data 类的基类中的公共属性?

    是否有标准的 HTTP 响应标头可用于发送令牌和自定义信息,以便跨域客户端也可以读取它?

任何帮助将不胜感激!谢谢!

【问题讨论】:

嗨 tpeczek - 感谢您抽出宝贵时间来研究这个问题。我以前看过这篇文章:codebetter.com/johnvpetersen/2012/04/02/…。我已经实现了使用私钥加密的基于令牌的身份验证。问题是如何在不注销用户的情况下发送更新的令牌(当会话超时更新时,会生成新的令牌)。一个特定的响应头是最好的选择,但不幸的是跨域客户端无法读取非标准响应头 【参考方案1】:

Authorization 标头用于此目的。查看此链接中的section 14.8,了解如何使用它的详细信息。

【讨论】:

授权不是请求头吗?我在询问 Http“响应”标头。 授权是请求和响应的有效标头。您可以/应该绝对使用带有自定义方案的 Authorization 标头来返回令牌

以上是关于如何从 RESTful 服务发送安全令牌?的主要内容,如果未能解决你的问题,请参考以下文章

将敏感信息安全地发送到 RESTful 服务

Django RESTful Framework 如何从 HTTP 标头的令牌中获取用户模型?

如何使用 Jersey API 从 RESTful Web 服务发送和接收 JSON 数据

如何处理restful对接口安全性问题

发送带有承载令牌授权标头 (flask_restful + flask_jwt_extended) 的 GET 消息时出现“段不足”

如何防止经过身份验证的用户欺骗 RESTful API 调用