[問題] 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