带有自定义标头的MVC重定向

use*_*146 6 c# model-view-controller asp.net-mvc http-headers asp.net-mvc-4

希望对于那里的某个人来说,这是一个简单的问题.

基本上收到我的MVC控制器的请求后,我想:

  1. 在响应中添加"授权"标头
  2. 重定向到另一个域上的另一个应用程序
  3. 阅读此外部站点的"授权"标题.

它似乎是重定向,删除所有自定义标头和重定向的行为.

我的问题是,如何添加新标头,并执行重定向,并在接收主机[在重定向结束时]的标题中显示该标题?

Chr*_*att 9

你不能.这不是HTTP的工作方式.首先,"重定向"只是一个301,302或(自HTTP 1.1)307状态代码,其Location标头设置为客户端应该访问的URL.它是客户端发起对该URL的请求,因此您无法控制它们发送的标头.

其次,HTTP是无状态的,这样一个事实Authorization头球攻门被在某些时候某些响应发送具有上的任何东西轴承是发生在未来的任何请求.Web浏览器和其他HTTP客户端通过使用服务器端的会话和客户端的cookie来绕过HTTP的无状态特性.客户端使用请求将cookie发送到服务器.cookie与服务器上会话存储中的项匹配,服务器从该会话中加载数据,以便像保持状态一样提供外观.

第三,cookie在这种情况下不起作用,因为它们是域绑定的,不会与请求发送到它们不是源自的域.因此,即使您要创建会话以维护授权,另一个站点也永远不会看到它.

FWIW,这里的基本前提,与不同的域共享身份验证状态,正是为OAuth开发的技术.因此,在这方面的未来研究.

  • 您所描述的是OAuth和HTTP作为协议故意不允许的事情.不是*你*决定什么是"受信任的应用程序",而不是"受信任的应用程序",它是*用户*.这是通过与已知实体的身份验证来完成的.一旦涉及不同的实体,则再次需要认证,因为用户不信任该新实体.根据设计,没有办法绕过这个*.能够成为一个巨大的安全漏洞. (2认同)

Ale*_*kov 2

否 - 302 重定向由浏览器处理,不会重新附加标头。

选项:

  • 服务器端代理
  • 使用cookie而不是其他标头(如果是同一个域,不是你的情况每2)
  • 手动重定向客户端(可能没问题,因为无论如何您都在进行 AJAX 调用)。