2

我在 .net core 2.2 站点上使用 itfoxtec-identity-saml2 进行身份验证。这一切都很好,但一方面,站点的 URL 区分大小写,并且必须与 SP 的元数据中指定的完全相同。如果不是这就是发生的事情(简化):

在元数据中,我网站的根 url 是https://domain/MySite

  • Microsoft.AspNetCore.Hosting.Internal.WebHost:请求开始 HTTP/1.1 GET https://domain/mysite
  • Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler:AuthenticationScheme:saml2 未通过身份验证。
  • Microsoft.AspNetCore.Mvc.ChallengeResult:使用身份验证方案 (saml2) 执行 ChallengeResult。
  • Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler:AuthenticationScheme:saml2 受到质疑。
  • 请求被路由到 Auth 控制器中的 Login 方法
  • Microsoft.AspNetCore.Mvc.Infrastructure.RedirectResultExecutor:执行 RedirectResult,重定向到https://idp/HTTP-Redirect?SAMLRequest=samlAuthRequest
  • Microsoft.AspNetCore.Hosting.Internal.WebHost:请求开始 HTTP/1.1 POST https://domain/MySite/AssertionConsumerService
  • Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler:AuthenticationScheme:saml2 已登录。
  • 用户现在已通过身份验证,原始请求再次启动:
  • Microsoft.AspNetCore.Hosting.Internal.WebHost:请求开始 HTTP/1.1 GET https://domain/mysite
  • Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler:AuthenticationScheme:saml2 未通过身份验证。

这一切都从一个新的 saml 身份验证请求和一个成功的 saml 身份验证重新开始,当用户在新的 saml 身份验证请求的永无止境的循环中再次被重定向到原始请求的页面时,站点会立即忘记这一点。

如您所见,原始请求是向https://domain/mysite发出的,IdP 将 SAML-token 发送到元数据中指定的 url https://domain/MySite/,当原始页面是再次请求它再次发送到https://domain/mysite

我通常不经常使用网络内容,所以我真的不知道我在说什么,但我感觉在返回 SAML 令牌时创建的会话 cookie 仅对应于格式化的 url SAML 令牌正在发送到。

该站点托管在 Windows Server 2012 上的 IIS 中。

有没有办法让网站的网址不区分大小写?

4

1 回答 1

1

我认为问题在于浏览器将 cookie 路径视为区分大小写,而 IIS 不区分大小写。ITfoxtec Identity SAML2 使用 ASP.NET Core Identity,它使用包含用户身份的身份 cookie。

因为 cookie 路径区分大小写,所以如果大小写发生变化,浏览器不会发送 cookie。因此,用户未被认证。

解决方案是使用相同的情况。一个解决方案是要求小写:

  1. 配置小写路由ASP.NET Core web app URL在验证用户时区分大小写(我没有测试过这个方案)
  2. 添加重定向到小写的 .NET 核心中间件。
  3. 在 IIS/web.config 中将 url 重写配置为小写。
于 2019-12-17T08:05:13.680 回答