1

Tomcat 7 で実行できるように、Web アプリのコードを IBM WAS 7 に移植することを検討するよう依頼されました。

これは大規模な SPNEGO/Kerberos SSO システムの一部ですが、説明のために、2 つの WebSphere クラス AccessController と WSSubject への依存関係を示すコードを次のように要約しました。

GSSCredential clientCreds = (GSSCredential) com.ibm.ws.security.util.AccessController.doPrivileged(new java.security.PrivilegedAction() {
    public Object run() {
        javax.security.auth.Subject subject = com.ibm.websphere.security.auth.WSSubject.getCallerSubject();
        GSSCredential clientCreds = (GSSCredential) subject.getPrivateCredentials(GSSCredential.class).iterator().next();
        return clientCreds;
    }
});

Tomcatでこれを実行できるようにしたいです。

[編集] 上記の要約されたコードは、おそらく何が必要かを明確に説明していないと思います。Web アプリへのアクセスを制御するために Tomcat を構成する必要も、リモート ユーザーになりすます必要もありません。実際に必要なのは、暗号化されていない Kerberos チケットです。これにより、認証を完了する別のプロセスにそれを渡すことができます。より完全なスニペットを次に示します。

com.ibm.ws.security.util.AccessController.doPrivileged(new java.security.PrivilegedAction() {
  public Object run() {
    Oid krb5Mechanism = new Oid("1.2.840.113554.1.2.2");
    Oid krb5PrincipalNameType = new Oid("1.2.840.113554.1.2.2.1");
    GSSManager manager = GSSManager.getInstance();
    GSSName serverName = manager.createName("HOST/my.host.org", krb5PrincipalNameType);
    javax.security.auth.Subject subject = com.ibm.websphere.security.auth.WSSubject.getCallerSubject();
    GSSCredential clientCreds = (GSSCredential) subject.getPrivateCredentials(GSSCredential.class).iterator().next();
    GSSContext secContext = manager.createContext(serverName, krb5Mechanism, clientCreds, GSSContext.DEFAULT_LIFETIME);
    // After this the Kerberos ticket is extracted from secContext, converted to a String and passed to the other process for authentication
  }
});
4

1 に答える 1

0

このコードが基本的に行うことは、(おそらく) 以前に認証された JAAS サブジェクトから資格情報を抽出することです。Tomcat のコンテキストでは、SSO の一部を処理するためのサーバー固有の方法にすぎないため、有用なものは何もありません。

Kerberos ベースの SSO が Tomcat にどのように実装されているかを学ぶ必要があります。Windows Authentication How-Toによると、これは可能です。しかし、私はこれを自分で試しませんでした。

于 2013-10-20T23:30:27.207 に答える