因此,我已经环顾四周找到了我正在寻找的答案,特别是在这个网站上,没有任何运气或方法可以得到我想要的应用程序。
它是一个java应用程序,我尝试与Windows Server 2012 R2中的Active Directory进行交互,因此如果用户已登录到他们的计算机,则用户不必登录此Java应用程序使用Active Directory。
我听说如果用户使用Active Directory登录,机器上就会有某种令牌,我希望我能够检查该令牌,获取用户名登录用户,并使用该用户名将其登录到Java应用程序(忽略密码)。我想这样做,而不必对AD服务器进行身份验证。
我不确定这是针对此Java应用程序管理Active Directory的最有效方式,但鉴于我的情况,这是我需要的全部内容。
欢迎链接,如果之前已经提出过这个问题,我很抱歉。
编辑:这假设我可用的唯一信息是Active Directory用户的用户名,该用户名将与java应用程序中的用户名相匹配。我也有服务器凭据,但我试图避免以任何形式存储服务器的密码。
答案 0 :(得分:2)
想出来。使用System.getenv(" USERDNSDOMAIN")为我们提供了user @ domain,如果用户没有使用Active Directory登录,则该域为null,这在这种情况下就足够了。然后我们使用JAAS和服务器配置文件来获取我们的LoginContext,它从登录用户获取Subject。
希望这有助于某人!
例如,这里是代码:
//this returns the logged in user if they're authenticated with the ldap server (Active Directory)
public javax.security.auth.Subject getSubject()
{
String ldapServer = System.getenv("USERDNSDOMAIN");
if (ldapServer == null)
{
Logger.error("No \"USERDNSDOMAIN\" environment variable found");
return null;
}
System.setProperty("java.security.auth.login.config", "jaas.conf");
System.setProperty("javax.security.auth.useSubjectCredsOnly", "true");
try
{
LoginContext loginCtx = new LoginContext("Server", new TextCallbackHandler());
loginCtx.login();
return loginCtx.getSubject();
}
}
和jaas.conf文件的内容:
Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=false
useTicketCache=true;
};