使用iframe进行单点登录传递cookie

由于公司需求,要求把地址直接放到iframe的src属性,进行直接跳转到内部页面,直接免登录操作;于是出现了cookie丢失的问题,导致登陆失败;

从谷歌浏览器会发现以下提示

 

 ,意思就是浏览器现在加上了SameSite的特性,谷歌浏览器的默认属性是SameSite=Lax,那就是禁止传递cookie的意思。想要传递这个cookie就要设置这个SameSite属性为None且带上Secure=True的设置;

既然知道了怎么回事,那就设置这个属性就行了吧。

根据实际情况,公司的后台服务是部署在IIS上面,直接说解决方法吧,1在传递cookie的asp.net页面添加请求头

,这样还不行,还要再iis上面进行URL重写,需要在服务器安装一个程序,叫:urlrewrite2.exe,百度一下就可以下载。

 

安装完后打开iis的网站,双击url重写,添加出站规则,填写如下信息

 

 ,然后配置文件会自动生成重写的内容

  <system.webServer>
 <rewrite>
            <outboundRules>
                <remove name="AddSameSiteCookieFlag" />
                <remove name="RESPONSE_X-AspNetMvc-Version" />
                <remove name="RESPONSE_SERVER" />
                <rule name="RESPONSE_SERVER" enabled="true">
                    <match serverVariable="RESPONSE_SERVER" pattern=".+" />
                    <conditions />
                    <action type="Rewrite" value="MYJ" />
                </rule>
                <rule name="RESPONSE_X-AspNetMvc-Version" enabled="true">
                    <match serverVariable="RESPONSE_X-AspNetMvc-Version" pattern=".+" />
                    <conditions />
                    <action type="Rewrite" value="MYJ" />
                </rule>
                <rule name="AddSameSiteCookieFlag" enabled="true" stopProcessing="true">
                    <match serverVariable="RESPONSE_Set-Cookie" pattern="^(.*)(CFID|CFTOKEN|SameSite)(=.*)$" />
                    <conditions />
                    <action type="Rewrite" value="{R:1};SameSite=None;Secure;" />
                </rule>
            </outboundRules>
        </rewrite>

  </system.webServer>

 

重启站点,完成!

 

posted @ 2020-11-12 08:54  博客小莫  阅读(6284)  评论(0编辑  收藏  举报