2

POC の 1 つで Krb5LoginModule を使用しています。useDefaultCache=true と renewTGT=true を指定しました。

renewTGT=true について言及しましたが、チケットの有効期限が切れると、コードは例外をスローします。Windows レジストリで allowtgtsessionkey の値を 1 に設定しました (XP SP2 を実行しています)。KDC (ActiveDirectory) 設定はデフォルトです。チケットの有効期間 = 10 時間、更新リクエストのしきい値 = 7 日。

ソースコード

import java.util.HashMap;
import java.util.Map;
import javax.security.auth.Subject;
import com.sun.security.auth.module.Krb5LoginModule;

public class Temp3 {
    public static void main(String[] args) throws Exception {
        System.setProperty("sun.security.krb5.debug", "true");

        Subject subject = new Subject();

        Krb5LoginModule krb5 = new Krb5LoginModule();

        Map <String, String> map = new HashMap <String, String>();
        map.put("useTicketCache", "true");
        map.put("doNotPrompt", "true");
        map.put("renewTGT", "true");
        map.put("debug", "true");

        krb5.initialize(subject, null, null, map);
        krb5.login();
        krb5.commit();
        System.out.println(subject);
    }
}

チケットの有効期限が切れていない場合、つまり上記のコードを実行してから 10 時間以内に kinit を実行した場合、コードは正常に機能します。

SQL Server ドライバー (バージョン 4.0) を使用して JDBC ベースのアプリケーションを実行する必要があるため、この POC を作成しました。データベースの再接続の試行中に、長時間実行されているサービスが失敗することは望ましくありません。これは、パイプの破損につながるネットワークの不具合などの要因が原因で発生する可能性があります。

4

1 に答える 1

3

あなたは間違った方向に進んでいます。資格情報を取得するために使用する必要がLoginContextあり、Kerberos 5 と直接やり取りしないでください。次に、人間以外のアクセスにはキータブが必要です。これは TGT に相当します。Krb5LoginModuleサーバーのKeytabをエクスポートし、構成を変更します。このチュートリアルが役に立ちます。

于 2012-09-04T07:43:14.077 に答える