我在 .net 4.0 上使用网络表单,我真的很难让它发挥作用。我使用了来自 jasig 站点的文档——并为客户端安装了 nuget 包。
https://wiki.jasig.org/display/CASC/.Net+Cas+Client
我成功登录并从 CAS 服务器取回了一个令牌,但似乎无法对其进行身份验证。据我所知,可以调用三种不同的服务方法来验证令牌:
/证实
/服务验证
/samlValidate
validate 方法只返回一个“no”的 Web 响应,而当我调用 serverValidate 方法时,它在 XML 响应中返回一个 INVALID_TICKET 代码。我也尝试过 samlValidate 但收到 403 错误(我知道这是一个潜在的有效响应)。
我的验证代码是这样的:
var validateurl = APPLICATION + "validate?" +
"ticket=" + tkt + "&" +
"service=" + service;
StreamReader Reader = new StreamReader(new WebClient().OpenRead(validateurl));
string resp = Reader.ReadToEnd();
我的 CAS 配置是:
<casClientConfig casServerLoginUrl="https://*IPSERVER*/cas/login"
casServerUrlPrefix="https://*IPSERVER*/cas/"
serverName="http://*MYSITE*/"
notAuthorizedUrl="~/NotAuthorized.aspx"
cookiesRequiredUrl="~/CookiesRequired.aspx"
redirectAfterValidation="true" gateway="false" renew="false" singleSignOut="true"
ticketTimeTolerance="5000" ticketValidatorName="Cas20" proxyTicketManager="CacheProxyTicketManager"
serviceTicketManager="CacheServiceTicketManager"
gatewayStatusCookieName="CasGatewayStatus" />
我想它一定是某种设置,但对于我的生活,我无法弄清楚设置可能是什么。
谁能告诉我为什么我无法验证令牌?
编辑:
考虑到这一点,我更加困惑。如果正如下面的@Steven V 所说,客户端应用程序 cookie 是由 httpmodule 创建的 - 如何对任何页面进行身份验证?例如,如果我在我的客户端 (RP) 应用程序页面(例如,landing.aspx)并单击指向(IP)身份验证服务器的链接以访问受限内容(例如,restricted.aspx) - 服务器如何神奇地创建 cookie在我登录后重定向到restricted.aspx 之前在客户端上。使用WIF 我仍然需要FormsAuthentication.CreateAuthCookie()
在代码中执行或类似操作。
如果我单击指向我的受限页面的链接,会发生什么情况,我会按预期重定向到(IP)CAS 服务器页面,并且在成功登录后获得无限重定向,因为大概该应用程序没有本地客户端 cookie并尝试进行身份验证,因此重定向到已经过身份验证的服务器并重定向回没有本地 cookie 的客户端,因此需要永远进行身份验证。
再次编辑:我已对此进行了进一步阅读(那里没有太多可用的内容),并发现此身份验证发生在非常低的级别,并且应该在页面重定向之前设置 cookie 的客户端应用程序 (RP) 上发生。这显然不会发生在我身上,我不知道如何解决问题所在。