0

指示に従って CAS-client を使用すると、外部 CAS サーバーから肯定的な応答が得られるようになりました。

CAS server responded with #<Net::HTTPOK 200 OK readbody=true>:

XML は次のようになります。

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
  <cas:authenticationSuccess>
    <cas:attributes>
      <cas:user>4oaz8QMucIrlFOU7dr3QpWkqbRY=</cas:user>
      <cas:ccc></cas:ccc>
      <cas:tipo>EDITED_OUT</cas:tipo>
      <cas:acceso>cd</cas:acceso>
      <cas:identificador>EDITED_OUT</cas:identificador>
      <cas:txtBienvenida>EDITED_OUT</cas:txtBienvenida>
      <cas:usuarioValidado>S</cas:usuarioValidado>
      <cas:correo>EDITED_OUT</cas:correo>
      <cas:tlf>EDITED_OUT</cas:tlf>
      <cas:tipoAcceso>2</cas:tipoAcceso>
      <cas:xusuario>EDITED_OUT</cas:xusuario>
      <!-- En caso de que el usuario disponga de certificado digital -->

      <cas:nif>EDITED_OUT</cas:nif>
      <cas:email>EDITED_OUT</cas:email>
      <cas:apellido1>EDITED_OUT</cas:apellido1>
      <cas:apellido2>EDITED_OUT</cas:apellido2>
      <cas:anagramaFiscal>EDITED_OUT</cas:anagramaFiscal>
      <cas:nombre>EDITED_OUT</cas:nombre>

      <!-- Faltan las fechas -->

      <cas:tipoCertificado>EDITED_OUT</cas:tipoCertificado>
      <cas:emisor>EDITED_OUT</cas:emisor>
      <cas:usoCertificado>EDITED_OUT</cas:usoCertificado>
      <cas:apellidosResponsable>EDITED_OUT</cas:apellidosResponsable>

      <!-- Faltan las fechas -->

      <cas:politica>1.3.6.1.4.1.5734.3.5</cas:politica>
      <cas:subject>EDITED_OUT</cas:subject>
      <cas:versionPolitica>45</cas:versionPolitica>
      <cas:organizacionEmisora>FNMT</cas:organizacionEmisora>
      <cas:idPolitica>DEFAULT</cas:idPolitica>
      <cas:numSerie>EDITED_OUT</cas:numSerie>
      <cas:clasificacion>FNMT</cas:clasificacion>
      <cas:tipoAfirma>0</cas:tipoAfirma>
    </cas:attributes>
  </cas:authenticationSuccess>
</cas:serviceResponse>

次に、rubycas-client から次のログ メッセージを取得します。

Ticket "EDITED_OUT" for service "EDITED_OUT" belonging to user nil is VALID.

そして、このエラーダンプ:

TypeError (can't dup NilClass):
  org/jruby/RubyKernel.java:1894:in `dup'
  ----CUTTED----

コードを調べると、エラーはfilter.rbの 64 行目にあるという結論に達しました。

controller.session[client.username_session_key] = st.user.dup

デバッグ中、 stオブジェクトの内容を調べました。

(rdb:2) st.is_valid?
true
(rdb:2) st.user
nil
(rdb:2) st
#<CASClient::ServiceTicket:0x7e054262
  @renew=nil,
  @extra_attributes={
    "user"=>"4oaz8QMucIrlFOU7dr3QpWkqbRY="
    "ccc"=>nil,
    "tipo"=>"CIUDADANO",
    "acceso"=>"cd",
    "identificador"=>"EDITED_OUT",
    "txtBienvenida"=>"EDITED_OUT",
    "usuarioValidado"=>"S", 
    "correo"=>"EDITED_OUT",
    "tlf"=>"EDITED_OUT",
    "tipoAcceso"=>"2",
    "xusuario"=>"EDITED_OUT",
    "nif"=>"EDITED_OUT", 
    "email"=>"EDITED_OUT",
    "apellido1"=>"EDITED_OUT",
    "apellido2"=>"EDITED_OUT",      
    "anagramaFiscal"=>"EDITED_OUT",         
    "nombre"=>"EDITED_OUT",
    "tipoCertificado"=>"FNMT PF",       
    "emisor"=>"EDITED_OUT",
    "usoCertificado"=>"EDITED_OUT",
    "apellidosResponsable"=>"EDITED_OUT",
    "politica"=>"1.3.6.1.4.1.5734.3.5",
    "subject"=>"EDITED_OUT",
    "versionPolitica"=>"45",
    "organizacionEmisora"=>"FNMT",
    "idPolitica"=>"DEFAULT",
    "numSerie"=>"EDITED_OUT",
    "clasificacion"=>"FNMT",
    "tipoAfirma"=>"0"
  },
  @service="EDITED_OUT",
  @failure_code=nil,
  @ticket="EDITED_OUT",
  @pgt_iou=nil,
  @user=nil,
  @failure_message=nil,
  @success=true
>

次に、xml の解析とresponse.rbを調べたところ、 55 行目にたどり着きました。

cas_user = @xml.elements["cas:user"]

cas_user は、XML ルートにcas:user要素がないため常に nil ですが、 cas:attributesの子として 1 つあるため、次のようになります。

@xml.elements["cas:attributes/cas:user"]

私の場合、何らかのダイジェストのように見える何かを返しますが、それがどのようにエンコードされているか、またはそこにどのような情報があるかはわかりません。

私の質問は、そのcas:attributes/cas:user属性が、クライアントが XML から解析しようとしている属性なのか、それとも別のものなのかということです。また、上に貼り付けた XML 形式が CAS-2.0 プロトコルに準拠しているかどうか、またはエラーの原因が不適切な形式の XML にあるかどうかを知りたいです。rubycas-client がすべての「有用なデータ」をextra_attributes内に格納するのは奇妙です。

私は以下を使用しています:

あなたの助けに感謝します。

4

1 に答える 1

0

cas:user は、応答で返される netid/プリンシパル名です。cas:user の出力から、CAS サーバーが OAUTH プロバイダーを使用していると思われます。CAS は、特定のサービスのユーザー名属性の匿名化もサポートしているため、サービスはインスタンスごとにユーザー名のみを取得することが保証されます。これは、サービス レジストリで選択 (選択解除) できます。

CAS 2.0 プロトコルは、属性リリースを正式にサポートしていません。SAML 1.1 プロトコルのみが公式にサポートしています。CAS 2.0 が属性を解放できるようにするために多くのサイトが実装する簡単な変更がありますが、サイトはそれを好きなように実装できます。

于 2013-09-19T15:38:02.840 に答える