【发布时间】:2014-05-06 14:50:55
【问题描述】:
我在 .net 4.0 上使用网络表单,我真的很难让它发挥作用。我使用了 jasig 站点的文档,并为客户端安装了 nuget 包。
https://wiki.jasig.org/display/CASC/.Net+Cas+Client
我已成功登录并从 CAS 服务器取回了一个令牌,但似乎无法对其进行身份验证。据我所知,可以调用三种不同的服务方法来验证令牌:
/验证
/serviceValidate
/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的客户端,因此需要永远进行身份验证。
再次编辑:我已对此进行了进一步阅读(那里没有太多可用的)并发现此身份验证发生在非常低的级别,并且应该发生在客户端应用程序(RP ) 在页面重定向之前设置 cookie。这显然不会发生在我身上,而且我不知道如何解决问题所在。
【问题讨论】:
-
您为什么要手动验证票证?在我们的 CAS 实现中,票证验证由 HttpModule 负责,然后正确设置 Identity。
-
因为当我尝试这样做时,我通过IP成功登录,但从未回到我网站的受限内容。你是在什么阶段在本地登录的?
-
.. 你如何设置本地用户 cookie?
-
我们的应用程序可以保护应用程序的一部分和完整的应用程序。我们使用 web.config
<authorization>元素来实现这一点。用户 cookie 由 Jasig 自动设置,除了编辑 web.config 之外不需要任何实现。在 github.com/Jasig/dotnet-cas-client/tree/master/ExampleWebSite 上查看 Jasig 的示例 .NET 应用程序。 -
不幸的是我已经尝试过了,并且得到了与我的测试项目相同的行为。我怀疑服务器上可能存在一些自定义设置。由于我无法控制服务器 - 并且与运行它的人几乎没有沟通 - 我不认为我有机会轻松解决这个问题
标签: .net c#-4.0 single-sign-on cas jasig