URL 将自定义 Header 重写为 Cookie
URL Rewrite Custom Header into a Cookie
我有一个客户端向 Web API 发出 http 请求。 API 使用 cookie 进行保护;但是,此客户端无法发送 cookie。此客户端能够发送自定义 http headers。那么我们是否可以使用重写模块来获取自定义的 http header 并将其设置为 cookie。
我已将 HTTP_COOKIE 添加为服务器变量。我挣扎的地方是条件。如何设置条件以拉取自定义 http header,并将其设置为 cookie。
编辑
所以我使用下面的规则将 header 复制到 cookie
<rule name="cookie" patternSyntax="ECMAScript">
<match url=".+" />
<serverVariables>
<set name="HTTP_COOKIE" value="{C:0}" />
</serverVariables>
<action type="None" />
<conditions logicalGrouping="MatchAny" trackAllCaptures="false">
<add input="{HTTP_ccauth}" pattern=".+" />
</conditions>
</rule>
现在它覆盖了 cookie,所以我需要附加到它...
在我看来,如果 WebAPI 是通过使用 cookie 来保护的,则客户端应该通过 WebAPI 身份验证(JWT,Asp.Net 身份)系统进行身份验证,而不是设置本地缓存来传输凭据。如果客户端 cookie 可以通过 JS/Postman
设置,则系统不安全,建议使用 HttpOnly 类型的 cookie。
此外,您可以在 URL 中添加一个查询字符串来确定是否设置本地缓存。请参考以下链接。
https://www.reddit.com/r/dotnet/comments/2xb6a5/is_there_a_way_to_add_a_setcookie_header_using/
https://clarify.dovetailsoftware.com/gsherman/2011/01/20/using-the-url-rewrite-module-to-set-your-cookies-to-httponly/
需要两条规则,一条在没有cookie的情况下设置cookie,另一条在有cookie的情况下将其附加到cookie
<rule name="Append Auth Header to Cookies" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".+"/>
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{HTTP_ccauth}" pattern="(.+)"/>
<add input="{HTTP_COOKIE}" pattern="(.+)"/>
</conditions>
<serverVariables>
<set name="HTTP_COOKIE" value="{C:1}{C:2}"/>
</serverVariables>
<action type="None"/>
</rule>
<rule name="Set Auth Header to Cookies" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".+"/>
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{HTTP_ccauth}" pattern="(.+)"/>
</conditions>
<serverVariables>
<set name="HTTP_COOKIE" value="{C:1}"/>
</serverVariables>
<action type="None"/>
</rule>
我有一个客户端向 Web API 发出 http 请求。 API 使用 cookie 进行保护;但是,此客户端无法发送 cookie。此客户端能够发送自定义 http headers。那么我们是否可以使用重写模块来获取自定义的 http header 并将其设置为 cookie。
我已将 HTTP_COOKIE 添加为服务器变量。我挣扎的地方是条件。如何设置条件以拉取自定义 http header,并将其设置为 cookie。
编辑 所以我使用下面的规则将 header 复制到 cookie
<rule name="cookie" patternSyntax="ECMAScript">
<match url=".+" />
<serverVariables>
<set name="HTTP_COOKIE" value="{C:0}" />
</serverVariables>
<action type="None" />
<conditions logicalGrouping="MatchAny" trackAllCaptures="false">
<add input="{HTTP_ccauth}" pattern=".+" />
</conditions>
</rule>
现在它覆盖了 cookie,所以我需要附加到它...
在我看来,如果 WebAPI 是通过使用 cookie 来保护的,则客户端应该通过 WebAPI 身份验证(JWT,Asp.Net 身份)系统进行身份验证,而不是设置本地缓存来传输凭据。如果客户端 cookie 可以通过 JS/Postman
设置,则系统不安全,建议使用 HttpOnly 类型的 cookie。
此外,您可以在 URL 中添加一个查询字符串来确定是否设置本地缓存。请参考以下链接。
https://www.reddit.com/r/dotnet/comments/2xb6a5/is_there_a_way_to_add_a_setcookie_header_using/
https://clarify.dovetailsoftware.com/gsherman/2011/01/20/using-the-url-rewrite-module-to-set-your-cookies-to-httponly/
需要两条规则,一条在没有cookie的情况下设置cookie,另一条在有cookie的情况下将其附加到cookie
<rule name="Append Auth Header to Cookies" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".+"/>
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{HTTP_ccauth}" pattern="(.+)"/>
<add input="{HTTP_COOKIE}" pattern="(.+)"/>
</conditions>
<serverVariables>
<set name="HTTP_COOKIE" value="{C:1}{C:2}"/>
</serverVariables>
<action type="None"/>
</rule>
<rule name="Set Auth Header to Cookies" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".+"/>
<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
<add input="{HTTP_ccauth}" pattern="(.+)"/>
</conditions>
<serverVariables>
<set name="HTTP_COOKIE" value="{C:1}"/>
</serverVariables>
<action type="None"/>
</rule>