2016-03-21 6 views
1

いくつかのSOAP署名/検証にApache WSS4J 1.5を使用する必要がありますが、UsernameTokenパスワード検証をスキップ/ディスエーブルするのに問題があります。WSS4j 1.5:パスワード検証をスキップする方法は?

WSS4J 1.6+では、NoOpValidator()クラスを使用してユーザー名トークン認証をスキップするようにセキュリティエンジンを構成できましたが、1.5にはこのサポートがありません。

WSS4J 1.5にユーザー名/パスワード検証ルーティングをスキップするように指示する方法はありますか?

答えて

0

が付属していますUsernameTokenをオブジェクトの:

 WSSecurityEngine secEngine = new WSSecurityEngine(); 
     WSSConfig wsConfig = WSSConfig.newInstance(); 
     wsConfig.setProcessor(UsernameToken.TOKEN, new Processor() { 

      @Override 
      public void handleToken(Element arg0, Crypto arg1, Crypto arg2, CallbackHandler arg3, WSDocInfo arg4, Vector arg5, WSSConfig arg6) 
        throws WSSecurityException { 
       // skip the token processing 
       logger.debug("Skipping processing of the username token"); 
      } 

      @Override 
      public String getId() { 
       return null; 
      } 
     }); 
     secEngine.setWssConfig(wsConfig); 

WSS4J 1.5がうまくいけば、これは将来的に他の誰かを期待して、非常に古いですが。

WSS4J 1.6+は、代わりにこれらのプロセッサが検証ツールで動作する方法を変更しました。

1

独自のコールバックハンドラの実装を記述して、ローディングをスキップする必要があります。そのハンドラクラスをシステムプロパティから読み込むことができます。デフォルトのCallbackHandlerクラスの実装は auth.login.defaultCallbackHandlerセキュリティプロパティで指定されてもよいjavax.security.auth.callback.CallbackHandler

のソースコードから参照

セキュリティプロパティは、/lib/security/java.securityというファイルにあるJavaセキュリティプロパティファイル で設定できます。 はjava.homeシステム・プロパティーの値を指し、 はJREがインストールされているディレクトリーを指定します。セキュリティプロパティが CallbackHandler実装クラスの完全修飾名に設定されている場合

、その後LoginContextは、指定されたCallbackHandler をロードして、基礎となる のLoginModuleに渡します。

LoginContextは、 が提供されていない場合にのみデフォルトハンドラをロードします。すべてのデフォルトのハンドラ実装では、引数なしのコンストラクタ を公開する必要があります。

はまた、いくつかのリスクを認識してWSSecEngineクラスの周りの多くの深さで少し掘った後、私ははCallBackHandlerない必要なことがわかったが、処理をスキップするカスタムプロセッサWSS4J 1.5.XX

+0

私はまだコールバックハンドラを登録する方法が少し混乱しています。私は 'UsernameTokenProcessor'のソースコードを見ましたが、ここでコールバックハンドラを見るまでに、すでに返されたパスワードを比較しています。私はWSS4JがUsernameTokenを処理しようとすることさえ防止する必要がありますが、コールバックハンドラをどのようにすべきか、あるいはどのように登録するべきかは完全にはわかりません。これに関するドキュメントや例があるかどうか知っていますか? WSS4J 1.5はかなり古く、私が見つけたドキュメントはWSS4J 2+のものです。 –

+0

Ok - 私はもう少し詳しくコードを掘り下げて、必要なCallbackHandlerではなく、カスタムプロセッサであることを確認しました。 –