Gunnlaugur Sigurðsson wrote:
Hi Kurt.

No, I don't have any documentation at the moment, but I can fix that.
Great, then we can add that to the Authentication chapter in the user guide.
According to our IT operations department, this is an Active Directory 2000/LDAP server uddi v3 compliant. No modifications to the LDAP server where needed. But if you want to search for some juddi publisher group, I would imagine that it had to be created.

-Gunnlaugur





On Sun, May 2, 2010 at 3:47 PM, Kurt T Stam <[email protected] <mailto:[email protected]>> wrote:

    Hi Gunnlaugur,

    Thanks for the example. We'd love to add it to the example
    codebase. Do you have any documentation for this? Also which LDAP
    did you use this with and did you have to add anything to the LDAP
    server to make it work?

    Thx!

    --Kurt

    Gunnlaugur Sigurðsson wrote:

        Hi Jeff.

        Here is an example one can use to authenticate against LDAP.
        You might want to use this as an option for jUDDI users.

        +++++++++++++++++++++++++++++++++++++++++++++++++++
        package org.apache.juddi.v3.auth;

        import javax.naming.ldap.Control;

        public class LdapFastBindConnectionControl implements Control {

           private static final long serialVersionUID =
        7847083714026112317L;

           public byte[] getEncodedValue() {
               return null;
           }

           public String getID() {
               return "1.2.840.113556.1.4.1781";
           }

           public boolean isCritical() {
               return true;
           }

        }

        +++++++++++++++++++++++++++++++++++++++++++++++++++

        import java.util.Hashtable;

        import javax.naming.Context;
        import javax.naming.NamingEnumeration;
        import javax.naming.NamingException;
        import javax.naming.directory.Attribute;
        import javax.naming.directory.Attributes;
        import javax.naming.directory.SearchControls;
        import javax.naming.directory.SearchResult;
        import javax.naming.ldap.Control;
        import javax.naming.ldap.InitialLdapContext;
        import javax.naming.ldap.LdapContext;
        import javax.persistence.EntityManager;
        import javax.persistence.EntityTransaction;

        import org.apache.juddi.config.PersistenceManager;
        import org.apache.juddi.model.Publisher;
        import org.apache.juddi.model.UddiEntityPublisher;
        import org.apache.juddi.v3.error.AuthenticationException;
        import org.apache.juddi.v3.error.ErrorMessage;
        import org.apache.juddi.v3.error.FatalErrorException;
        import org.apache.juddi.v3.error.UnknownUserException;
        import org.apache.log4j.Logger;

        public class LdapFastBindAuthenticator implements Authenticator {

           private Logger log = Logger.getLogger(this.getClass());

           private Hashtable<String, String> env = null;
           private LdapContext ctx = null;
           private Control[] connCtls = null;

           public LdapFastBindAuthenticator(String url) throws
        NamingException {
               env = new Hashtable<String, String>();
               env.put(Context.INITIAL_CONTEXT_FACTORY,
        "com.sun.jndi.ldap.LdapCtxFactory");
               env.put(Context.SECURITY_AUTHENTICATION, "simple");
               env.put(Context.PROVIDER_URL, url); // organization
        ldap url, example ldap://localhost:389

               connCtls = new Control[] { new
        LdapFastBindConnectionControl() };

               try {
                   ctx = new InitialLdapContext(env, connCtls);
               } catch (NamingException e) {
                   log.error("Naming exception " + e);
                   throw e;
               }
           }

           public String authenticate(String authorizedName, String cred)
                   throws AuthenticationException, FatalErrorException {
               if (authorizedName == null || "".equals(authorizedName)) {
                   throw new UnknownUserException(new
        ErrorMessage("errors.auth.NoPublisher", authorizedName));
               }

               boolean isLdapUser = false;
               try {
                   ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,
        authorizedName);
                   ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,
        cred);
                   ctx.reconnect(connCtls);
                   log.info <http://log.info>
        <http://log.info>(authorizedName + " is authenticated");

                              /* if we don't want search ldap any
        further we set isLdap as true, and skip the code between START
        HERE and END HERE */
                              /* Here is possible to make some more
        extensive search in ldap to see if the user is part of some
        group only allowed to access the registry. */
                   /* START HERE */
//Create the search controls SearchControls searchCtls = new SearchControls();
                              //Specify the search scope
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);
                              //specify the LDAP search filter
                   String searchFilter =
        "(&(objectClass=user)([email protected]
        <mailto:[email protected]> <mailto:[email protected]
        <mailto:[email protected]>>)(department=foo))";


                   //Specify the Base for the search
                   String searchBase = "DC=domain,DC=com";

                   //initialize counter to total the group members
                   int totalResults = 0;

                   //Specify the attributes to return
                   String returnedAtts[]={"memberOf"};
                   searchCtls.setReturningAttributes(returnedAtts);

                   //Search for objects using the filter
                   NamingEnumeration<?> answer =
        ctx.search(searchBase, searchFilter, searchCtls);
                              //Loop through the search results
                   while (answer.hasMoreElements()) {
                       SearchResult sr = (SearchResult)answer.next();
                                      //Print out the groups
                       Attributes attrs = sr.getAttributes();
                       if (attrs != null) {
                           try {
                               for (NamingEnumeration<?> ae =
        attrs.getAll();ae.hasMore();) {
                                   Attribute attr = (Attribute)ae.next();
                                   for (NamingEnumeration<?> e =
        attr.getAll();e.hasMore();totalResults++) {
                                       //System.out.println(" " +
         totalResults + ". " +  e.next());

                                        String tmp = e.next().toString();
                                       if
        (tmp.equalsIgnoreCase("CN=Foo,OU=Bar,OU=Bleh,OU=Doh,DC=domain,DC=com"))
        {
                                           System.out.println(true);
System.out.println("Authentication Success!");
                                           isLdapUser = true;
                                           break;
                                       } else if
        (tmp.equalsIgnoreCase("CN=Foo,OU=Bar,OU=Bleh,OU=Doh,DC=domain,DC=com"))
        {
                                           System.out.println(true);
System.out.println("Authentication Success!");
                                           isLdapUser = true;
                                           break;
                                       } else {
                                           continue;
                                       }
                                   }
                               }
                           } catch (NamingException e)    {
                               throw new UnknownUserException(new
        ErrorMessage("errors.auth.NoPublisher", authorizedName));
                           }
                       }
                   }
                   /* END HERE */
               } catch (NamingException e) {
                   log.error(authorizedName + " is not authenticated");
                   throw new UnknownUserException(new
        ErrorMessage("errors.auth.NoPublisher", authorizedName));
               } finally {
                   try {
                       ctx.close();
                   } catch (NamingException e) {
                       log.error("Context close failure " + e);
                   }
               }

               if (isLdapUser) {
                   EntityManager em =
        PersistenceManager.getEntityManager();
                   EntityTransaction tx = em.getTransaction();
                   try {
                       tx.begin();
                       Publisher publisher = em.find(Publisher.class,
        authorizedName);
                       if (publisher == null) {
                           log.warn("Publisher was not found, adding
        the publisher in on the fly.");
                           publisher = new Publisher();
                           publisher.setAuthorizedName(authorizedName);
                           publisher.setIsAdmin("false");
                           publisher.setIsEnabled("true");
                           publisher.setMaxBindingsPerService(199);
                           publisher.setMaxBusinesses(100);
                           publisher.setMaxServicesPerBusiness(100);
                           publisher.setMaxTmodels(100);
                           publisher.setPublisherName("Unknown");
                           em.persist(publisher);
                           tx.commit();
                       }
                   } finally {
                       if (tx.isActive()) {
                           tx.rollback();
                       }
                       em.close();
                   }
               } else {
                   throw new UnknownUserException(new
        ErrorMessage("errors.auth.NoPublisher", authorizedName));
               }
               return authorizedName;
           }

           public UddiEntityPublisher identify(String authInfo, String
        authorizedName) throws AuthenticationException,
        FatalErrorException {
               EntityManager em = PersistenceManager.getEntityManager();
               EntityTransaction tx = em.getTransaction();
               try {
                   tx.begin();
                   Publisher publisher = em.find(Publisher.class,
        authorizedName);
                   if (publisher == null)
                       throw new UnknownUserException(new
        ErrorMessage("errors.auth.NoPublisher", authorizedName));
                   return publisher;
               } finally {
                   if (tx.isActive()) {
                       tx.rollback();
                   }
                   em.close();
               }
           }
        }

        +++++++++++++++++++++++++++++++++++++++++++++++++++


        Thanks.

        -Gunnlaugur





        On Wed, Apr 28, 2010 at 5:32 PM, Jeff Faath <[email protected]
        <mailto:[email protected]> <mailto:[email protected]
        <mailto:[email protected]>>> wrote:

           Is this a compiler error or a runtime error?  Maybe if you
        tried
           to implement something in those methods where an exception was
           actually thrown?

*From:* Gunnlaugur Sigurðsson
        [mailto:[email protected] <mailto:[email protected]>
           <mailto:[email protected]
        <mailto:[email protected]>>]
           *Sent:* Wednesday, April 28, 2010 10:05 AM

           *To:* [email protected]
        <mailto:[email protected]>
        <mailto:[email protected]
        <mailto:[email protected]>>

           *Subject:* Re: Authenticator implementation

Hi Jeff.

           I have a project I created in eclipse where I have the core
        juddi
           jar on the jave build path.
           Is there a better way for me to create the authenticator,
        than in
           my own project? Like within the juddi code bundle and build
        it there?

           Thanks.

           -Gunnlaugur



           On Wed, Apr 28, 2010 at 2:51 PM, Jeff Faath
        <[email protected] <mailto:[email protected]>
           <mailto:[email protected] <mailto:[email protected]>>> wrote:

           Gunnlaugur,

That error seems to be something to do with the
        environment.  Is
           the core jUDDI jar in the classpath where the authenticator is
           being executed?

-Jeff

*From:* Gunnlaugur Sigurðsson
        [mailto:[email protected] <mailto:[email protected]>
           <mailto:[email protected]
        <mailto:[email protected]>>]
           *Sent:* Wednesday, April 28, 2010 5:12 AM
           *To:* [email protected]
        <mailto:[email protected]>
        <mailto:[email protected]
        <mailto:[email protected]>>

           *Subject:* Authenticator implementation

Hello.

           I'm implementing the Authenticator interface to
        authenticate users
           against Active Directory in my workplace.

           But I keep getting errors on the exceptions classes thrown by
           authenticate and identify functions.

           The following error comes up.
           No exception of type AuthenticationException can be thrown; an
           exception type must be a subclass of Throwable

           Same error occurs whit the FatalErrorException class.


           Here is my unimplemented JUDDIActiveDirectoryAuthhenticaton
        class.

           public class JUDDIActiveDirectoryAuthhenticaton implements
           Authenticator {

               public String authenticate(String arg0, String arg1) throws
           AuthenticationException, FatalErrorException {
                              // TODO Auto-generated method stub
                   return null;
               }

               public UddiEntityPublisher identify(String arg0, String
        arg1)
           throws AuthenticationException, FatalErrorException {

                   // TODO Auto-generated method stub
                   return null;
               }
           }

           Any idea why I get this error?

           Thanks.

           --
           Kveðja/Regards
           Gunnlaugur Sigurðsson
           [email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>

           Mobile: (+354) 896-7963
           Home: (+354) 565-5229




           --
           Kveðja/Regards
           Gunnlaugur Sigurðsson
           [email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>

           Mobile: (+354) 896-7963
           Home: (+354) 565-5229




--
        Kveðja/Regards
        Gunnlaugur Sigurðsson
        [email protected] <mailto:[email protected]>
        <mailto:[email protected] <mailto:[email protected]>>

        Mobile: (+354) 896-7963
        Home: (+354) 565-5229





--

Kveðja/Regards
Gunnlaugur Sigurðsson
[email protected] <mailto:[email protected]>
Mobile: (+354) 896-7963
Home: (+354) 565-5229

Reply via email to