在使用Java GSS-API和Kerberos时,如何为多个用户主体指定基于键表的登录信息?

在使用Java GSS-API和Kerberos时,如何为多个用户主体指定基于键表的登录信息?,java,kerberos,gssapi,Java,Kerberos,Gssapi,我正在使用Java GSS-API和Kerberos进行安全身份验证。我想从一个客户端程序连接到两个不同的KDC服务器,以访问多个服务。为此,我使用配置文件krb5.conf,如下所示: [libdefaults] default_realm = HOST1 udp_preference_limit = 1 [realms] HOST1 = { kdc = host1:88 } HOST2 = { kdc = host2:88 } com.sun.security.jgss.i

我正在使用Java GSS-API和Kerberos进行安全身份验证。我想从一个客户端程序连接到两个不同的KDC服务器,以访问多个服务。为此,我使用配置文件krb5.conf,如下所示:

[libdefaults]
default_realm = HOST1
udp_preference_limit = 1
[realms]
HOST1 = {
    kdc = host1:88
}
HOST2 = {
    kdc = host2:88
}
com.sun.security.jgss.initiate {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  keyTab=user.keytab
  principal="user1@LOCALHOST"
  storeKey=true;
};

com.sun.security.jgss.accept {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  keyTab=service.keytab
  principal="service1@LOCALHOST"
  storeKey=true;
};
对于登录,我使用基于keytab的登录,配置如下所示:

[libdefaults]
default_realm = HOST1
udp_preference_limit = 1
[realms]
HOST1 = {
    kdc = host1:88
}
HOST2 = {
    kdc = host2:88
}
com.sun.security.jgss.initiate {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  keyTab=user.keytab
  principal="user1@LOCALHOST"
  storeKey=true;
};

com.sun.security.jgss.accept {
  com.sun.security.auth.module.Krb5LoginModule required
  useKeyTab=true
  keyTab=service.keytab
  principal="service1@LOCALHOST"
  storeKey=true;
};

此配置要求在配置文件中提及原则名称。现在的问题是,我们只能在配置中指定一个主体名称,但我想访问需要登录多个主体名称的多个服务。如何为多个用户主体指定登录信息?

您正在为每个部分使用默认名称(顺便说一下,还有一个过时的名称)。您可以从使用显式名称开始,比如卡夫卡——即
Client{…;};服务器{…;}