Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jasig CAS在.NET中的实现_.net_C# 4.0_Single Sign On_Cas_Jasig - Fatal编程技术网

Jasig CAS在.NET中的实现

Jasig CAS在.NET中的实现,.net,c#-4.0,single-sign-on,cas,jasig,.net,C# 4.0,Single Sign On,Cas,Jasig,我正在使用.NET4.0上的webforms,我真的很难让它正常工作。我使用了jasig站点的文档,并为客户端安装了nuget包 我正在成功登录并从CAS服务器获取令牌,但似乎无法对其进行身份验证。就我所见,有三种不同的服务方法可以调用以验证令牌: /证实 /服务验证 /samlValidate validate方法只返回一个“no”的web响应,而当我调用serverValidate方法时,它在XML响应中返回一个无效的\u票证代码。我也尝试过samlValidate,但收到403错误(我知

我正在使用.NET4.0上的webforms,我真的很难让它正常工作。我使用了jasig站点的文档,并为客户端安装了nuget包

我正在成功登录并从CAS服务器获取令牌,但似乎无法对其进行身份验证。就我所见,有三种不同的服务方法可以调用以验证令牌:

/证实

/服务验证

/samlValidate

validate方法只返回一个“no”的web响应,而当我调用serverValidate方法时,它在XML响应中返回一个无效的\u票证代码。我也尝试过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,比方说)-在我登录后重定向到restricted.aspx之前,服务器如何神奇地在客户端上创建cookie。使用WIF,我仍然需要执行
形式的身份验证。CreateAuthCookie()
或类似的代码

如果我点击到我的受限页面的链接,我会按照预期重定向到(IP)CAS服务器页面,并且在成功登录后获得无限重定向,因为应用程序可能没有本地客户端cookie并尝试进行身份验证,因此重定向到已通过身份验证的服务器,并重定向回没有本地cookie的客户端,因此需要进行身份验证。。永远


再次编辑:我进一步阅读了这方面的内容(没有太多可用信息),发现这种身份验证发生在非常低的级别,应该发生在页面重定向之前设置cookie的客户端应用程序(RP)上。这显然不是发生在我身上的事情,我也不知道如何去找出哪里出了问题。

我最终不得不下载Jasig CAS客户端的源代码,并实现一个新的票证验证器。我们使用的IP是ECAS,欧盟委员会的身份验证服务,它不支持我客户的权限级别

对于任何感兴趣的人,或任何碰巧尝试连接到ECAS的人(.NET不是他们支持的平台之一)。从/Validation/Schema/TicketValidator文件夹中的.NET客户端,您可以实现以下功能:

namespace DotNetCasClient.Validation.TicketValidator
{
    internal class ECasServiceTicketValidator : Cas20ServiceTicketValidator
    {
在CasAuthentication.cs文件中,您需要添加以下代码段:

        // Names for the supported ticket validators
        public const string CAS10_TICKET_VALIDATOR_NAME = "Cas10";
        public const string CAS20_TICKET_VALIDATOR_NAME = "Cas20";
        public const string ECAS_TICKET_VALIDATOR_NAME = "ECas";
        public const string SAML11_TICKET_VALIDATOR_NAME = "Saml11";

然后,在网站的web.config中的casConfigClient设置中,添加以下内容:

ticketValidatorName="ECas"

希望这对其他人有所帮助。

为什么要手动验证票据?在我们的CAS实现中,票证验证由HttpModule负责,然后正确设置标识。因为当我尝试这样做时,我通过IP成功登录,但从未返回到我站点的受限内容。您在什么阶段在本地登录?。。那么如何设置本地用户cookie呢?我们的应用程序可以保护应用程序的一部分和整个应用程序。我们使用web.config
。不幸的是,我尝试了这个,得到了与测试项目相同的行为。我怀疑这背后可能有一些服务器上的自定义设置。由于我无法控制服务器,并且与运行服务器的人几乎没有通信,我不认为我有机会轻松解决这个问题
ticketValidatorName="ECas"