Zah*_*kan 8 java spring kerberos spring-security spring-boot
我们尝试使用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 the context initiator is null");
}
first = false;
}
if (!holdOnToGSSContext) {
context.dispose();
}
return new KerberosTicketValidation(gssName.toString(), servicePrincipal, responseToken, context);
}
Run Code Online (Sandbox Code Playgroud)
当我们使用null SrcName错误搜索此GSSContext时,通常建议的解决方案与keytab文件相关.但在我们的问题中,我们甚至无法像我们在开头提到的那样到达AD服务器.
相关链接:带有SrcName的GSSContext
还有其他建议吗?
谢谢...
| 归档时间: |
|
| 查看次数: |
590 次 |
| 最近记录: |