私は.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) で発生するはずであることがわかりました。これは明らかに私には起こっていません。何がうまくいかないのかをどうやって解決するかについての手がかりがありません.