阻止浏览器缓存外部登录凭据



我有一个使用外部登录服务(OAUTH(进行身份验证的Web应用程序,需要将其重定向到SSO服务器以进行登录。我的问题是在第一次登录浏览器后保存与SSO相关的cookie,第二次剂量不要求用户名密码只需从SSO弹回,从SSO弹跳到主要Web应用程序

我尝试手动删除饼干!但是,当我尝试使用一件代码进行操作时,例如:

foreach (var cookie in Request.Cookies.Keys) Response.Cookies.Delete(cookie);

它也将被删除,但看起来好像已被删除,并且不会要求用户凭证的" Just Just弹回"

看来您的问题不是cookie,该页面是从浏览器缓存加载的第二次。

您需要禁用index.html页面的浏览器缓存,该页面每次浏览器请求服务器以获取页面时,都会加载新页面。为此,在index.html标头中添加元标记。

<meta http-equiv="Cache-control" content="no-cache, no-store">
<meta http-equiv="Pragma" content="no-cache">

no-cachemax-age=0, must-revalidate表示相同的含义。

(pragma&amp; cache-control是同一件事,但从不同的http规范中。请参阅此处的答案:Pragma和Cache-Control标头之间的区别?(

或者您可以将日期附加到脚本标签中以获取JS

<script src="js/config.js?v="+ new Date() type="text/javascript"></script>

通过在前端发送查询时进行此操作,它将附加新的dateTime,这表明缓存的JS与请求不同,并且防止加载页面的加载版,现在已加载新页面后(不是来自Cache((,将发生验证请求,成功登录后,您的页面将被重定向。

如果您每次在导航上每次加载效果时都担心性能,则必须使用诸如Angular之类的框架,该框架是单页应用程序,因此在重新加载时仅加载一次,并且在导航时继续进行。

  • 您可以在index.html或
  • 中添加这些元标记
  • 如果后端是IIS服务器,请添加一个Web.config文件(我尚未与其他服务器尝试(

在root web.config中,我们指定我们不想通过设置高速缓存,pragma和expires request eleast eleast标题以及最大值为0。

<location path="index.html">
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="DisableCache" cacheControlMaxAge="0.00:00:00" />
    </staticContent>
      <httpProtocol>
        <customHeaders>
          <add name="Cache-Control" value="no-cache, no-store, must-revalidate" />
          <add name="Pragma" value="no-cache" />
          <add name="Expires" value="-1" />
        </customHeaders>
      </httpProtocol>  
  </system.webServer>
</location>

有关缓存的更多详细信息检查这些

  • iis客户端缓存:https://learn.microsoft.com/en-us/iis/configuration/system.webserver/staticcontent/clientcache
  • 缓存控制HTTP标头:https://developer.mozilla.org/en-us/docs/web/http/headers/cache-control
  • Pragma HTTP标头:https://developer.mozilla.org/en-us/docs/web/http/headers/pragma
  • 到期HTTP标头:https://developer.mozilla.org/en-us/docs/web/http/headers/expires

最新更新