我正在使用带有 ASP.NET MVC 的 .NET CAS 客户端,并且我有一个链接允许用户登录 SSO 并保持在同一页面上。链接转到/MyApp/Account/SsoLogin?returnUrl=%2fMyApp%2fMyController%2fMyAction%3fFirstParameter%3d12345%26SecondParameter=54321
。解码,returnUrl
应该是/MyApp/MyController/MyAction?FirstParameter=12334&SecondParameter=54321
不幸的是,在 CAS 之后我在控制器操作中获得的原始 URL 是/Account/SsoLogIn?returnUrl=/MyController/MyAction?FirstParameter&SecondParameter=54321
.
所以返回的 URL 已经被解码,第一个参数的值就没有了。这适用于某人已经通过 SSO 进行身份验证和尚未通过 SSO 进行身份验证的情况。我打开 Firebug 来查看他们已经通过身份验证的情况。这是我所拥有的:
302, location is https://ssoserver/cas/login?service=http%3a%2f%2flocalhost%3a10001%2fMyApp%2fAccount%2fSsoLogIn%3freturnUrl%3d%2fMyApp%2fMyController%2fMyAction%3fFirstParameter%3d12345%26SecondParameter%3d54321
然后我们有另一个302:
302, location is http://localhost:10001/MyApp/Account/SsoLogIn?returnUrl=/MyApp/MyController/MyAction?FirstParameter=12345&SecondParameter=54321&ticket=someUglyString
这里我们首先看到两个问号。
然后我们有第三个 302:
302, location is http://localhost:10001/MyApp/Account/SsoLogIn?returnUrl=/MyApp/MyController/MyAction?FirstParameter=12345&SecondParameter=54321
更多的双问号。现在是最后的 302:
302, location is /MyApp/MyController/MyAction?FirstParameter&SecondParameter=54321
然后我们得到一个 500 错误尝试加载/MyApp/MyController/MyAction?FirstParameter&SecondParameter=54321
,这应该是/MyApp/MyController/MyAction?FirstParameter=12345&SecondParameter=54321
。
有任何想法吗?