0

AD に接続し、それに応じてユーザーを認証できるように Tomcat を構成したいと考えています。

さらに、クライアント資格情報を使用していくつかの Web サービス (この場合は共有ポイント) を呼び出したいと考えています。

これまでのところ、http://tomcat.apache.org/tomcat-7.0-doc/windows-auth-howto.htmlのチュートリアルで説明されているように、SPNEGO 認証を使用するように Tomcat を正常に構成できました。Tomcat の SPNEGO 認証を使用したことに注意してください (Source Forge や Waffle ではありません)。

物事をシンプルに保ち、Tomcat の実装をそのまま使用したかったので、Source Forge の実​​装は使用しませんでした。さらに、すべての認証と承認を Tomcat で処理する必要がありました。SPNEGO を認証方法として使用しWEB.XML、Tomcat の JNDI レルムを承認に使用します。

また、これは Windows のみであるため、WAFFLE は使用していません。

CXF を Web サービス スタックとして使用しています。http://cxf.apache.org/docs/client-http-transport-included-ssl-support.html#ClientHTTPTransport%28includesSSLsupport%29-SpnegoAuthentication%28Kerberos%29の CXF ドキュメントによると、必要なことはすべてWeb サービス (私の場合は共有ポイント) で認証するには、次を使用します。

 <conduit name="{http://example.com/}HelloWorldServicePort.http-conduit"
   xmlns="http://cxf.apache.org/transports/http/configuration">
   <authorization>
      <AuthorizationType>Negotiate</AuthorizationType>
      <Authorization>CXFClient</Authorization>
   </authorization>
 </conduit>

jaas.conf で CXFClient を構成します (私の場合、Tomcat のサーバー JAAS 構成が配置されている場所で、jass.conf次のようになります。

CXFClient {
    com.sun.security.auth.module.Krb5LoginModule required client=true useTicketCache=true debug=true;
};

com.sun.security.jgss.krb5.initiate {
    com.sun.security.auth.module.Krb5LoginModule required
    doNotPrompt=true
    principal="HTTP/tomcatsrv.corporate.intra@CORPORATE.INTRA"
    useKeyTab=true
    keyTab="C:/Program Files/Apache/apache-tomcat-7.0.27/conf/tomcatsrv.keytab"
    storeKey=true
    debug=true;
};

com.sun.security.jgss.krb5.accept {
    com.sun.security.auth.module.Krb5LoginModule required
    doNotPrompt=true
    principal="HTTP/tomcatsrv.corporate.intra@CORPORATE.INTRA"
    useKeyTab=true
    keyTab="C:/Program Files/Apache/apache-tomcat-7.0.27/conf/tomcatsrv.keytab"
    storeKey=true
    debug=true;
};

それでも、Web サービスを呼び出すとtomcatsrv.keytab、クライアントのユーザー名 (duncan.attard など) ではなく、サービスのユーザー名 (AD および で構成された Tomcat のユーザー名) で呼び出されます。

私の質問は次のとおりです。クライアントのユーザー名を CXF に委任 (またはある種の偽装を使用) して、Share Point の Web サービスを呼び出したときに (たとえば、Copy.asmx を使用してファイルをアップロードしたい) 方法はありますか?の場合、ファイルは としてduncan.attardではなく としてアップロードされますtomcat.srv

どうもありがとう、あなたの助けは大歓迎です。

4

1 に答える 1

0

技術的には、これは完全に機能します。レシピは次のとおりです。

  1. 資格情報の委任を使用する場合は、ログインモジュール名は必要ありません。
  2. ユーザーアカウントが委任の対象であることを確認する必要があります。

Tomcatの実装を見てくださいGenericPrincipal。GSSクレデンシャルがある場合はそれを節約できます。クレデンシャルにキャストrequest.getPrincipalGenericPrincipalて取得します。

今、あなたが資格を持っていると言います:

  1. およびSubjectをプライベートクレデンシャルとして作成します。PrincipalGSSCredential
  2. CXFコードをにラップしますPrivilegedAction
  3. 構築されたサブジェクトと特権アクションのインスタンスをSubject.doAsメソッドに渡すと、システムはAccessControlContext渡されたサブジェクトに代わって構築し、そのコンテキストに代わってJAAS内のすべてを呼び出します。CXFは、正しく実装されている場合はそれらを使用する必要があります。これはsusudoUnixのようなものです。

これをテストする最も簡単な方法InitialDirContextは、クライアントに代わってActiveDirectoryに対して特権アクションを作成することです。これは、私が実際に機能するクレデンシャル委任環境をテストする方法です。

于 2012-07-21T21:17:53.137 に答える