停止在IIS中的相同站点ID下的应用程序之间共享Cookie

时间:2018-03-20 16:19:59

标签: iis single-sign-on iis-7.5 identityserver3

问题我现在正在使用IdentityServer作为企业应用程序的SSO身份验证。但是,我们的大部分应用程序都在IIS 7.5中的相同站点ID下。在同一站点ID下导航到超过5个这样的应用程序时,最终会出现400错误,请求标头太长。原因是每个应用程序都有自己的cookie,因此请求标头传递大约5个带有令牌信息的cookie并且变得太大。

我的问题是,您是否能够阻止在IIS 7.5中相同站点ID下的应用程序之间共享cookie?

3 个答案:

答案 0 :(得分:0)

你可以尝试很少的东西。在服务器级别进行以下更改。

  1. 在IIS中突出显示服务器名称,选择“配置编辑器”,选择“system.web”和“httpRuntime”并将“maxRequestLength”更改为“1048576”。
  2. 您还可以通过以下方式编辑“applicationHost.config”文件 - C:\ Windows \ System32 \ inetsrv \ Config

    <configuration>
        <system.web>
            <httpRuntime maxRequestLength="1048576" />
        </system.web>
    </configuration>
    
    1. 在IIS上编辑服务器级别的“请求过滤”设置,并将“maxAllowedContentLength”设置为“1073741824”
    2. 您还可以按以下方式编辑根web.config文件 - C:\ Windows \ Microsoft.NET \ Framework64 * \ v4.0.30319 * \ Config

      *文件夹取决于您的应用程序。如果是32位应用程序,请导航到“Framework”文件夹。如果是.net 2.0应用程序,请导航到v2.0.50727。

      <system.webServer>
         <security>
             <requestFiltering>
                <requestLimits maxAllowedContentLength="1073741824" />
             </requestFiltering>
         </security>
      </system.webServer>
      

答案 1 :(得分:0)

首先 - 我想说我自己没有尝试过,所以我无法保证这是一个解决方案,但我正在努力帮助。

Cookie的问题源自Microsoft OWIN / Katana及其加密方式。它们变得巨大,但这与Identity Server无关。不过,herehere对此有很好的讨论。

首先尝试的主要是在IdentityServer项目的Startup.cs中,在IdentityServerOptions.AuthenticationOptions中有一个属性SignInMessageThreshold,默认为5.尝试将其设置为较低的值,这将使您的标题更小(当应用程序在cookie中没有消息时,这可能会导致身份服务器往返,但这不会强制用户重新登录)。

我们在其中一个项目中实现的另一件事是创建一个支持DataBase的cookie会话处理程序。在您的客户中,您使用

app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "Cookies",
            CookieName = cookieName,
        });

还有一个属性SessionStore。您可以拥有Microsoft.Owin.Security.Cookies.IAuthenticationSessionStore的自定义实现。在我们的例子中,这将cookie大小减少到小于(或大约)300。

答案 2 :(得分:0)

我们还为IIS上的同一台计算机上托管的SSO和内部应用程序提供IdentityServer。 我也遇到了同样的问题。

这是一个解决方案:

1)您需要解决Owin / Katana中间件问题以避免nonce overfloating。 Here you can find the code for that fix

2)你必须停止共享cookie。

因此,如果您的应用程序的基地址是“ mysite.com ”。 你有很多不同的应用程序:

  • 好应用: mysite.com/good_app /
  • 最佳应用:mysite.com/best_app /
  • 超级应用:mysite.com/super_app /

对于应用程序方面的每个应用程序使用 CookiePath ,它将limit cookies(并且看起来也是here。)

使用这样的代码(对于“ Good App ”):

var cookieOptions = new CookieAuthenticationOptions
{
      AuthenticationType = "Cookies",
      CookieName = "GoodAppCookies",
      // Cookie Path same as application name on IIS
      CookiePath = "/good_app
};

希望它会有所帮助。