问题我现在正在使用IdentityServer作为企业应用程序的SSO身份验证。但是,我们的大部分应用程序都在IIS 7.5中的相同站点ID下。在同一站点ID下导航到超过5个这样的应用程序时,最终会出现400错误,请求标头太长。原因是每个应用程序都有自己的cookie,因此请求标头传递大约5个带有令牌信息的cookie并且变得太大。
我的问题是,您是否能够阻止在IIS 7.5中相同站点ID下的应用程序之间共享cookie?
答案 0 :(得分:0)
你可以尝试很少的东西。在服务器级别进行以下更改。
您还可以通过以下方式编辑“applicationHost.config”文件 - C:\ Windows \ System32 \ inetsrv \ Config
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" />
</system.web>
</configuration>
您还可以按以下方式编辑根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无关。不过,here和here对此有很好的讨论。
首先尝试的主要是在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 ”。 你有很多不同的应用程序:
对于应用程序方面的每个应用程序使用 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
};
希望它会有所帮助。