小编Zah*_*kan的帖子

具有spring安全性的LDap GSSContext null srcName

我们尝试使用Spring安全性进行Windows身份验证.

当我们看到我们无法使用为本地PC创建的keytab文件对我们的域用户进行身份验证时,我们检查了我们的服务用户并查看其密码是否有效.然后我们检查了我们是否可以从本地到达AD域.当我们在AD域服务器机器上使用网络监控工具控制时,我们的本地没有请求.我们还使用以下命令检查了来自客户端的传出流量;

netstat -oan 1 | find /I "[IP_ADDRESS_OF_AD_DOMAIN]"
Run Code Online (Sandbox Code Playgroud)

我们可以通过telnet测试我们当地的IP.

我们的application.properties如下所示;

app.ad-domain= example.com
app.ad-server= ldap://adds.example.com.tr/
app.service-principal= HTTP/local_pc.example.com.tr@EXAMPLE.COM.TR
app.keytab-location= local_pc.keytab
app.ldap-search-base= OU=All Users,DC=example,DC=com
app.ldap-search-filter= "(| (userPrincipalName={0}) (sAMAccountName={0}))"
Run Code Online (Sandbox Code Playgroud)

结果我们无法获得GSSContext的srcName.此gssName变量等于null.相关的SunJaasKerberosTicketValidator代码块如下;

@Override
public KerberosTicketValidation run() throws Exception {
    byte[] responseToken = new byte[0];
    GSSName gssName = null;
    GSSContext context = GSSManager.getInstance().createContext((GSSCredential) null);
    boolean first = true;
    while (!context.isEstablished()) {
        if (first) {
            kerberosTicket = tweakJdkRegression(kerberosTicket);
        }
        responseToken = context.acceptSecContext(kerberosTicket, 0, kerberosTicket.length);
        gssName = context.getSrcName();
        if (gssName == null) {
            throw new BadCredentialsException("GSSContext name of …
Run Code Online (Sandbox Code Playgroud)

java spring kerberos spring-security spring-boot

8
推荐指数
0
解决办法
590
查看次数

标签 统计

java ×1

kerberos ×1

spring ×1

spring-boot ×1

spring-security ×1