区分大小写的 url,必须与 SP 元数据中指定的完全相同
Posted
技术标签:
【中文标题】区分大小写的 url,必须与 SP 元数据中指定的完全相同【英文标题】:Case sensitive urls, has to be exact as specified in SP metadata 【发布时间】:2020-04-06 19:06:28 【问题描述】:我在 .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 令牌发送到元数据中指定的 url,https://domain/MySite/,当重新请求原始页面时,它会发出再次https://domain/mysite。
我通常不经常处理网络内容,所以我真的不知道我在说什么,但我感觉在返回 SAML 令牌时创建的会话 cookie 只对应于什么格式化 SAML 令牌的 URL 被发送到。
该站点托管在 Windows Server 2012 上的 IIS 中。
有没有办法让网站的网址不区分大小写?
【问题讨论】:
【参考方案1】:我认为问题在于浏览器将 cookie 路径视为区分大小写,而 IIS 不区分大小写。 ITfoxtec Identity SAML2 使用 ASP.NET Core Identity,它使用包含用户身份的身份 cookie。
因为 cookie 路径区分大小写,所以如果大小写发生变化,浏览器不会发送 cookie。因此,用户未通过身份验证。
解决方案是使用相同的情况。一个解决方案是要求小写:
-
配置小写路由ASP.NET Core web app URL is case-sensitive when authenticating users(这个方案我没测试过)
添加重定向到小写的 .NET 核心中间件。
在 IIS/web.config 中将 url 重写配置为小写。
【讨论】:
如果您认为回复有帮助并且可以对其他人有所帮助,请评价答案,谢谢。以上是关于区分大小写的 url,必须与 SP 元数据中指定的完全相同的主要内容,如果未能解决你的问题,请参考以下文章
AADSTS50011:请求中指定的回复 URL 与为应用程序配置的回复 URL 不匹配:'**********-*****-*****-**** *****'
获取URL中指定的参数的值 — location.search
AADSTS50011:请求中指定的回复 URL 与为应用程序配置的回复 URL 不匹配我很反感