C# 阻止浏览器缓存外部登录凭据';s

C# 阻止浏览器缓存外部登录凭据';s,c#,asp.net-core,oauth,single-sign-on,C#,Asp.net Core,Oauth,Single Sign On,我有一个web应用程序,它使用外部登录服务(oauth)进行身份验证,需要重定向到SSO服务器进行登录。 我的问题是,第一次登录浏览器保存了一个与SSO相关的cookie,第二次不要求输入用户名密码,只是简单地从SSO返回到主web应用程序 我试过手动删除cookies,但效果很好!但当我试着用一段代码来做时,比如: foreach (var cookie in Request.Cookies.Keys) Response.Cookies.Delete(cookie); 它也将被删除,但看起来

我有一个web应用程序,它使用外部登录服务(oauth)进行身份验证,需要重定向到SSO服务器进行登录。 我的问题是,第一次登录浏览器保存了一个与SSO相关的cookie,第二次不要求输入用户名密码,只是简单地从SSO返回到主web应用程序

我试过手动删除cookies,但效果很好!但当我试着用一段代码来做时,比如:

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

它也将被删除,但看起来它已被删除,不会要求用户凭据,只是反弹回来了

似乎您的问题不在于cookies,当您第二次加载页面时,页面将从浏览器缓存加载

您需要禁用index.html页面的浏览器缓存,这将在浏览器每次向服务器请求页面时加载新页面。为此,请在index.html标题中添加meta标记


无缓存
max age=0,必须重新验证
表示相同的含义

(Pragma和Cache控制是一回事,但来自不同的HTTP规范。请参见此处的答案:)

或者您可以将日期附加到脚本标记以获取js


只要前端发送查询,它就会添加新的日期时间,这表明缓存的js与请求不同,并阻止加载页面的缓存版本。现在,在加载新页面(而不是从缓存)后,将发生身份验证请求,成功登录后,页面将被重定向

如果您在每次导航时加载它时都担心性能,那么您必须使用类似Angular的框架,这是一个单页应用程序,因此它在重新加载时只加载一次,并在导航时继续加载

  • 您可以在index.html或
  • 如果后端是IIS服务器,请添加一个web.config文件(我没有尝试使用其他服务器)
在root web.config中,我们通过将cache control、Pragma和Expires请求头以及max age设置为0来指定不希望缓存index.html



  • 缓存控制HTTP头:
  • Pragma HTTP头:
  • 过期HTTP标头:

  • 在本例中,SSO在用户登录时创建cookie。当用户从您的应用程序注销时,您还应该调用外部服务的注销端点,以便用户也从该端点注销。您是否使用OpenIdConnect?@ChetanRanpariya我实现了您的解决方案turn's out oauth provider已经调用了该端点,并且我的函数没有提供服务purpose@AliBahraminezhad不,它使用OAuth来执行外部服务实际注销用户?某些登录系统实际上不会注销用户,例如active directory。您使用的是哪种外部登录?您需要验证外部服务是否确实正在注销用户,并检查集成是否正确。