1

私は.net 4.0でWebフォームを使用していますが、これを機能させるのに本当に苦労しています。jasig サイトのドキュメントを使用し、クライアント用の nuget パッケージをインストールしました。

https://wiki.jasig.org/display/CASC/.Net+Cas+Client

ログインに成功し、CAS サーバーからトークンを取得していますが、認証できないようです。私が見る限り、トークンを検証するために呼び出す 3 つの異なるサービス メソッドがあります。

/検証

/サービス検証

/saml検証

検証メソッドは単に「いいえ」の 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 など) にいて、制限付きコンテンツ (restricted.aspx など) への (IP) 認証サーバーへのリンクをクリックすると、サーバーはどのように魔法のように Cookie を作成しますか?ログインした後、restricted.aspx にリダイレクトする前にクライアントでFormsAuthentication.CreateAuthCookie()

制限付きページへのリンクをクリックすると、予想どおり (IP) CAS サーバー ページにリダイレクトされ、ログインに成功すると無限リダイレクトが発生します。これは、おそらくアプリにローカル クライアント Cookie がないためです。認証を試みるため、すでに認証されているサーバーにリダイレクトされ、クライアントにリダイレクトされますが、ローカル Cookie がないため、認証が必要です..永遠に。

もう一度編集:私はこれについてさらに読みました (利用できるものはあまりありません)。この認証は非常に低いレベルで発生し、ページ リダイレクトの前に Cookie を設定するクライアント アプリ (RP) で発生するはずであることがわかりました。これは明らかに私には起こっていません。何がうまくいかないのかをどうやって解決するかについての手がかりがありません.

4

1 に答える 1

1

結局、Jasig CAS クライアントのソースをダウンロードし、新しいチケット バリデーターを実装する必要がありました。私たちが使用している IP は、欧州委員会の認証サービスである ECAS であり、私のクライアントの許可レベルをサポートしていませんでした。

興味のある方、またはたまたま ECAS に接続しようとしている方 (.NET は、サポートされているプラ​​ットフォームの 1 つではありません)。/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";

if (String.Compare(ticketValidatorName, CasClientConfiguration.CAS10_TICKET_VALIDATOR_NAME, true) == 0)
                        {
                            ticketValidator = new Cas10TicketValidator();
                        }
                        else if (String.Compare(ticketValidatorName, CasClientConfiguration.CAS20_TICKET_VALIDATOR_NAME, true) == 0)
                        {
                            ticketValidator = new Cas20ServiceTicketValidator();
                        }
                        else if (String.Compare(ticketValidatorName, CasClientConfiguration.ECAS_TICKET_VALIDATOR_NAME, true) == 0)
                        {
                            ticketValidator = new ECasServiceTicketValidator();
                        } 
                        else if (String.Compare(ticketValidatorName, CasClientConfiguration.SAML11_TICKET_VALIDATOR_NAME, true) == 0)
                        {
                            ticketValidator = new Saml11TicketValidator();
                        }

次に、Web サイトの web.config の casConfigClient 設定で、これを追加します。

ticketValidatorName="ECas"

これが誰かを助けることを願っています..

于 2014-06-10T15:49:06.480 に答える