.net-core - 区分大小写的 url,必须与 SP 元数据中指定的完全相同
问题描述
我在 .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 中。
有没有办法让网站的网址不区分大小写?
解决方案
我认为问题在于浏览器将 cookie 路径视为区分大小写,而 IIS 不区分大小写。ITfoxtec Identity SAML2 使用 ASP.NET Core Identity,它使用包含用户身份的身份 cookie。
因为 cookie 路径区分大小写,所以如果大小写发生变化,浏览器不会发送 cookie。因此,用户未被认证。
解决方案是使用相同的情况。一个解决方案是要求小写:
- 配置小写路由ASP.NET Core web app URL在验证用户时区分大小写(我没有测试过这个方案)
- 添加重定向到小写的 .NET 核心中间件。
- 在 IIS/web.config 中将 url 重写配置为小写。
推荐阅读
- javascript - 在 forceNetwork 中为 networkD3 更改图例文本的颜色
- android - 在 RelativeLayout 上未检测到滑动
- java - 如何在 Bazel BUILD 中使用 gradle 的 apply 插件?
- patch - “不支持 git 二进制差异”错误使用 yocto
- angular - 错误 TS2339:“FormData”类型上不存在属性“条目”
- java - 使用自己的密码和数字签名算法
- java - 网络故障后回滚 Spring Transaction
- kubernetes - Kubernetes - 使用自定义更改原因更新部署
- php - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行附近使用正确的语法
- swagger - 大摇大摆的编辑器:无法使用 $ref 添加本地引用