- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试为 ActiveDirectory 创建上下文(客户端和服务器都是 Windows),使用我的 Windows 凭据和 NTLM。
这是我的代码:
public void func() {
try {
URL configURL = getClass().getResource("jaas_ntlm_configuration.txt");
System.setProperty("java.security.auth.login.config", configURL.toString());
// If the application is run on NT rather than Unix, use this name
String loginAppName = "MyConfig";
// Create login context
LoginContext lc = new LoginContext(loginAppName, new SampleCallbackHandler());
// Retrieve the information on the logged-in user
lc.login();
// Get the authenticated subject
Subject subject = lc.getSubject();
System.out.println(subject.toString());
Subject.doAs(subject, new JndiAction(new String[] { "" }));
}
catch (LoginException e) {
e.printStackTrace();
}
}
class JndiAction implements java.security.PrivilegedAction {
private String[] args;
public JndiAction(String[] origArgs) {
this.args = (String[])origArgs.clone();
}
public Object run() {
performJndiOperation(args);
return null;
}
private static void performJndiOperation(String[] args) {
// Set up environment for creating initial context
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
// Must use fully qualified hostname
env.put(Context.PROVIDER_URL, "ldap://server:389");
// Request the use of the "GSSAPI" SASL mechanism
// Authenticate by using already established Kerberos credentials
env.put(Context.SECURITY_AUTHENTICATION, "GSSAPI");
try {
/* Create initial context */
// DirContext ctx = new InitialDirContext(env);
// Create the initial context
DirContext ctx = new InitialLdapContext(env, null);
// Close the context when we're done
ctx.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
}
我的 jaas_ntlm_configuration.txt 文件包含:
MyConfig { com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
doNotPrompt=false;
};
当我尝试启动上下文时,出现以下异常:
javax.naming.AuthenticationException: GSSAPI [Root exception is javax.security.sasl.SaslException: Final handshake failed [Caused by GSSException: Token had invalid integrity check (Mechanism level: Corrupt checksum in Wrap token)]]
at com.sun.jndi.ldap.sasl.LdapSasl.saslBind(Unknown Source)
at com.sun.jndi.ldap.LdapClient.authenticate(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.connect(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.<init>(Unknown Source)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(Unknown Source)
at com.sun.jndi.ldap.LdapCtxFactory.getUsingURLs(Unknown Source)
at com.sun.jndi.ldap.LdapCtxFactory.getLdapCtxInstance(Unknown Source)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(Unknown Source)
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.init(Unknown Source)
at javax.naming.ldap.InitialLdapContext.<init>(Unknown Source)
at JndiAction.performJndiOperation(JndiAction.java:204)
at JndiAction.run(JndiAction.java:181)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Unknown Source)
at MyTest.Do(MyTest.java:59)
at MyTest.main(MyTest.java:68)
Caused by: javax.security.sasl.SaslException: Final handshake failed [Caused by GSSException: Token had invalid integrity check (Mechanism level: Corrupt checksum in Wrap token)]
at com.sun.security.sasl.gsskerb.GssKrb5Client.doFinalHandshake(Unknown Source)
at com.sun.security.sasl.gsskerb.GssKrb5Client.evaluateChallenge(Unknown Source)
... 18 more
Caused by: GSSException: Token had invalid integrity check (Mechanism level: Corrupt checksum in Wrap token)
at sun.security.jgss.krb5.WrapToken_v2.getData(Unknown Source)
at sun.security.jgss.krb5.WrapToken_v2.getData(Unknown Source)
at sun.security.jgss.krb5.Krb5Context.unwrap(Unknown Source)
at sun.security.jgss.GSSContextImpl.unwrap(Unknown Source)
... 20 more
有人可以帮我解决这个问题吗?
最佳答案
您实际上使用的是 Kerberos 身份验证..如果这是你的意思,我可以告诉你我是如何让它工作的:
- add somewhere a file called krb5.conf with inside :
[libdefaults]
default_realm = YOUR_REALM
default_tkt_enctypes = arcfour-hmac-md5
default_tgs_enctypes = arcfour-hmac-md5
permitted_enctypes = arcfour-hmac-md5
dns_lookup_kdc = true
dns_lookup_realm = false
[realms]
YOUR_REALM = {
kdc = KERBEROS_SERVER
default_domain = YOUR_REALM
}
将此行添加到您的代码中:
System.setProperty("java.security.krb5.conf",PATH_TO_KRB5CONF_FILE);System.setProperty("sun.security.krb5.principal", PRINCIPAL_NAME_WITHOUT_DOMAIN);
如果您不知道您的 Kerberos 服务器,您将无法从命令行启动 klist,并使用使用 LDAP 协议(protocol)的服务(LDAP/server@domain -> server)。
如果还是不行尝试添加
System.setProperty("sun.security.krb5.debug", "true");
并发布输出。
关于javax.命名.AuthenticationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12025998/
我正在尝试连接到 SFTP 服务器。我有一个私钥和一个密码。我已经尝试阅读SO上的相关问题,但一直无法成功连接。 这是我试过的: pysftp.Connection(host=, username=,
我正在尝试为 ActiveDirectory 创建上下文(客户端和服务器都是 Windows),使用我的 Windows 凭据和 NTLM。 这是我的代码: public void func() {
是否有更简洁的方法来检查 javax.naming.AuthenticationException(或 spring)的主要失败原因? LDAP Wiki (Binding Errors) 中描述了不
INFO [client-001-job-3] o.j.s.s.impl.DataLoaderService - Using registration URL of http://localhost
我们将应用程序从 Spring & Hibernate 3.x 升级到 4.x。问题是 AuthenticationException.getAuthentication() 现在已被弃用。任何人都可
我正在尝试创建一个 AuthenticationException 的异常子类,如下所示: public class RegistrationNotCompleteException extends
这是极少数情况之一,几乎不可能重现,但我见过这种情况发生了 20 次中有 4 次。 这是我的 open_session 方法: def open_session: self.session =
我在使用 Paramiko(版本 1.7.6-2)ssh 客户端连接到设备时遇到问题: $ python Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56
我正在使用 MailKit 尝试通过 SMTP 通过交换服务器发送电子邮件,但当我尝试连接时出现以下错误: An exception of type 'System.Security.Authenti
我正在尝试过滤在我的应用程序中进行用户身份验证期间引发的 AuthenticationException。我知道这些不能用 @ControllerAdvice 和 @ExceptionHandler
我在一个项目中使用 Spring MVC 和 Spring Security,并用它实现一个登录表单。我遇到了一种奇怪的行为,这是我没有预料到的,我想知道是否有办法避免它。 当登录表单上出现身份验证错
当我尝试通过客户端连接 Hazelcast 服务器时,出现以下异常。 com.hazelcast.client.AuthenticationException: Invalid credentials
我正在尝试使用 Java 类 AuthenticationService 进行露天身份验证。这是代码: public void Authenticate() throws Authentication
我正在尝试使用 PushSharp 向我的应用程序发送推送通知。我有两个 Apple 帐户...一个是普通帐户,另一个是企业帐户。我在正常帐户上有一个开发人员证书可以使用,但我的开发和分发证书都无法在
我正在尝试使用 JAVA GSSAPI 执行 NTLM 绑定(bind)。 我收到此错误: javax.naming.AuthenticationException: GSSAPI [Root exc
我一直在使用 Kubernetes .net 客户端库版本来从容器内访问 Kubernetes api。今天我从客户端库版本 1.6.11 更新到 4.0.21 但这破坏了客户端身份验证的某些部分。
import paramiko host='x.x.x.x' port=22 username='root' password='password' cmd='dmidecode > a' ssh=p
我正在尝试定义一个默认入口点来处理AuthenticationException。 这是我的配置: @Override protected void configure(HttpSecurity ht
我在使用纯 Java 通过 ldap 连接到 Active Directory 时遇到问题。 如果 displayName 以 ,(逗号,例如“, name”)开头,我会得到一个 javax.nami
您好,我需要在 Spring 安全登录表单中添加一个新的异常,除了我想要自己的错误消息(直到现在它显示“错误的登录名/密码”)之外,一切正常。 我已经覆盖了用户名密码身份验证过滤器的默认尝试身份验证方
我是一名优秀的程序员,十分优秀!