[问题] JAVA与Windows AD沟通实作SSO

楼主: pangshie (pangshie)   2015-01-26 11:24:44
各位 30cm & E cup日安
我目前想用JAVA去跟Windows AD沟通
目前有实作出传入帐号密码去判断有无该使用者
想请问一下各位大神
我想做的是使用者登入Windows之后
先去判断该设备是否有加入AD中
若有就取出使用者的帐号去AD判断该使用者是否有在AD中
若没有则跳出登入视窗
整个过程除了Windows登入会输入帐号密码之外
其他地方不会取得密码
单纯只用帐号去做完整个流程
不知道JAVA有没有办法实作出这个功能
目前有方向应该是要透过JNDI
不过一直实作不出来
附上传入帐号密码的Code参考
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
public class ADtest {
public static void main(String[] args)
{
String ldapURL = "ldap://172.168.1.1";
String account = "Test";
String password = "12345678";
try{
LDAP_AUTH_AD(ldapURL, account, password);
System.out.println("VerifySuccess!");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void LDAP_AUTH_AD(String ldap_url, String account, String
password) throws Exception {
if (account.isEmpty() || password.isEmpty())
throw new Exception("Username or Password is empty!");
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldap_url);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, account + "@test.com");
env.put(Context.SECURITY_CREDENTIALS, password);
LdapContext ctx = null;
try {
ctx = new InitialLdapContext(env, null);
} catch (javax.naming.AuthenticationException e) {
throw new Exception("VerifyFail!");
} catch (javax.naming.CommunicationException e) {
throw new Exception("CannotFindServer!");
} catch (Exception e) {
throw new Exception("OtherError!");
} finally {
if (ctx != null) {
try {
ctx.close();
} catch (NamingException e) {
}
}
}
}
}
感谢看完乐乐长的文章
作者: tubbysong (song)   2015-01-26 19:26:00
是Active Directory 、Single Sign-On 吗?因为你都缩
楼主: pangshie (pangshie)   2015-01-27 01:01:00
对,搭配Active Directory 去做Single Sign-On

Links booklink

Contact Us: admin [ a t ] ucptt.com