自由服务器上LDAP Java单点登录

5
我希望使用Java在Websphere-Liberty服务器上实现单点登录,并使用LDAP验证用户。
我搜索了很多资料,但没有找到确切的示例。我已经检查了Stack Overflow上可用的每个示例,但没有成功。
如果有人能提供演示或示例代码,那将非常好。
提前感谢。
更新:在waffle的帮助下,我已经成功实现了同样的功能.. 但是waffle不适用于Linux/Unix。..有人可以帮我吗?

1
使用https://wiki.jasig.org/display/casum/home,简单可靠。 - Fran Montero
你想要使用Windows AD登录进行桌面SSO吗?那么请检查SPNEGO身份验证。如果你只是想在Liberty上的各种应用程序之间实现SSO,那么默认情况下会使用LTPA,只需将Liberty连接到LDAP注册表即可。你需要稍微澄清一下你真正需要的是什么。 - Gas
我正在寻找在Linux服务器上基于Web的Websphere Liberty中的SSO。你有任何参考代码吗? - Yaxita Shah
这是默认完成的。如果您登录到任何安全应用程序,您也将登录到该服务器上的所有其他安全应用程序。它使用LTPA令牌。您只需要在web.xml中定义安全约束以保护应用程序。当然,还要配置您的Liberty服务器在server.xml中与LDAP一起工作。身份验证代码不应包含在应用程序中,它将由服务器完成。 - Gas
3个回答

4

waffle不支持*nix操作系统。你可以使用JASS(仅支持Java SE 8),并且支持Krb5LoginModule,这将使你能够缓存操作系统票证。


1
如果您正在使用LDAP,则可以像基本身份验证一样传递认证。如果您知道用户名和密码,请在标题“Authorization”中附加值为“Basic base64_token”的标头。
base64令牌是一个字符串,其中包含以格式用户名:密码编码的base64格式的用户名和密码。理想情况下,这应该有效。如果不起作用,请告诉我。在这种情况下,我们可以使用SPNEGO探索选项。
JAVA中LDAP的代码:
public class Main
{
  public static void main(String[] args)
  {
    //Replace username and password with your username and password
    token = Base64.getEncoder().encodeToString((username + ":" + password).getBytes())
    conn = (HttpURLConnection) endpoint.openConnection();

    // Set the necessary header fields, which in this case is Basic
    conn.addRequestProperty("Authorization", "Basic " + token);

   //Continue to do what you want to do after this. This should authenticate 
  // you to the server
  }
}

这段代码与SSO或Web应用程序有什么关联?它只是展示了如何向请求添加基本身份验证头。 - Gas
这个问题特别询问如何使用Java进行LDAP服务的身份验证。我曾经通过传递基本的身份验证细节与LDAP服务进行通信并成功地完成了工作。这应该是可行的。我正在等待OP的回复。 - ayrusme

0

针对Windows系统,可以使用Waffle来实现单点登录。

要进行LDAP身份验证,您可以使用Spring MVC或简单的Java类,并使用以下代码行:

    String username = login.getUsername();// "ancb";
    String password = login.getPassword();// "*****";
    String base = "OU=******,DC=InfoDir,DC=DEV,DC=****";
    String dn = "CN=" + username + "," + base;
    String ldapURL = "ldaps://****.systems.**.****:3269";

    // Setup environment for authenticating
    Hashtable<String, String> environment = new Hashtable<String, String>();
    environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    environment.put(Context.PROVIDER_URL, ldapURL);
    environment.put(Context.SECURITY_AUTHENTICATION, "simple");
    environment.put(Context.SECURITY_PRINCIPAL, dn);
    environment.put(Context.SECURITY_CREDENTIALS, password);

    String dynamicLdapaccount = "(CN="+ username +")" ;

        DirContext authContext = new InitialDirContext(environment);

针对单点登录:

您需要在服务器级别上设置Kerberos和Spnego配置。对于自由服务器,其server.xml需要进行修改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接