基于身份验证后结果的 URL 重写重定向

本文关键字:URL 重写 重定向 结果 身份验证 | 更新日期: 2023-09-27 18:00:09

使用 Url 重写模块,我想根据自定义身份验证过程中检索到的某些值来驱动重写。

在PostAuthenticateRequest期间,我尝试使用HttpContext.Current.Request.Headers.Add("name", "value");设置HTTP标头,该标头在请求对象离开HTTPModule之前在请求对象上可见。

但是,在 URL 重写中,一个非常基本的条件失败,因为HTTP_name下没有文本。

<rule name="customrule" enabled="true" stopProcessing="true">
  <match url="(.*)" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{HTTP_name}" pattern=".+" /> <!-- doesn't work -->
    <!-- <add input="{HTTP_name}" pattern=".*" /> works -->
  </conditions>
  <action type="Rewrite" url="https://someotherdomain/{R:0}" />
</rule>

将条件上的模式更改为 .* 可以让规则通过,但 URL 显示为https:///{R:0} 。如果我在从服务器请求资源之前手动添加name标头,它能够找到数据。不幸的是,在提出请求之前,我没有数据。

是否可以跨 IIS 模块使用标头? 如何从 PostAuthenticate 获取到 URL 重写的值?

基于身份验证后结果的 URL 重写重定向

根据此博客 http://blogs.iis.net/wonyoo/relationship-between-application-request-routing-and-url-rewrite-modules ARR 实现发生在 URL 重写后的某个时间点,并且是外部服务器的实际代理。

据我了解,Url 重写模块在请求管道的早期拉取标头。因此,Url 重写模块将无法访问标头。管道继续通过身份验证和后身份验证执行,并最终将代理的责任移交给应用程序请求路由。