<div dir="ltr">If you are deploying as a module it should not be in the providers folder. It should be in modules/... and you refer to it in keycloak-server.json by adding a module: &lt;module-name&gt;</div><div class="gmail_extra"><br><div class="gmail_quote">On 23 November 2015 at 14:44, Ataraxus <span dir="ltr">&lt;<a href="mailto:atx@binaryninja.de" target="_blank">atx@binaryninja.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    Hello Erik, Hey Stian, <br>
    <br>
    thanks for clarification. I tried as suggested in the keycloak
    documentation, but somehow it didn&#39;t worked :( <br>
    I&#39;m deploying it by dropping the jar into the providers folder and
    restarting jboss. <br>
    How can i verify if it was loaded as a module? I&#39;m using EAP 6.4
    Overlay btw.<br>
    <br>
    This is the content of my .jar<br>
    <br>
    MYAPP.authenticator<br>
    ├── META-INF<br>
    │   ├── MANIFEST.MF<br>
    │   ├── maven<br>
    │   │   └── de.MYAPP.auth<br>
    │   │       └── MYAPP.authenticator<br>
    │   │           ├── pom.properties<br>
    │   │           └── pom.xml<br>
    │   └── services<br>
    │       └── org.keycloak.authentication.AuthenticatorFactory<br>
    ├── de<br>
    │   └── MYAPP<br>
    │       └── auth<br>
    │           └── authenticator<br>
    │               ├── MYAPPEmailAuthenticator.class<br>
    │               ├── MYAPPEmailAuthenticatorFactory.class<br>
    │               ├── MYAPPSAPAuthenticator.class<br>
    │               ├── MYAPPSAPAuthenticatorFactory.class<br>
    │               └── beans<br>
    │                   └── ProfileBean.class<br>
    └── modules<br>
        └── de<br>
            └── MYAPP<br>
                └── auth<br>
                    └── authenticator<br>
                        └── module.xml<br>
    <br>
    module.xml looks like this: <br>
    <br>
    &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br>
    &lt;module xmlns=<a>&quot;urn:jboss:module:1.1&quot;</a>
    name=&quot;de.MYAPP.auth.authenticator&quot;&gt;<br>
        &lt;resources&gt;<br>
            &lt;resource-root path=&quot;MYAPP.authenticator.jar&quot;/&gt;<br>
        &lt;/resources&gt;<br>
        &lt;dependencies&gt;<br>
            &lt;module name=&quot;org.keycloak.keycloak-core&quot;/&gt;<br>
            &lt;module name=&quot;org.keycloak.keycloak-model-api&quot;/&gt;<br>
            &lt;module name=&quot;org.keycloak.keycloak-events-api&quot;/&gt;<br>
            &lt;module name=&quot;org.keycloak.keycloak-services&quot;/&gt;<br>
            &lt;module name=&quot;org.keycloak.keycloak-services&quot;/&gt;<br>
            &lt;module name=&quot;org.keycloak.keycloak-login-api&quot;/&gt;<br>
            &lt;module name=&quot;org.jboss.logging.jboss-logging&quot;/&gt;<br>
            &lt;module name=&quot;javax.mail.mail&quot;/&gt;<br>
        &lt;/dependencies&gt;<br>
    &lt;/module&gt;<br>
    <br>
    <div>Am 23.11.15 um 14:18 schrieb Stian
      Thorgersen:<br>
    </div><div><div class="h5">
    <blockquote type="cite">
      <div dir="ltr">Just look at Keycloak documentation:
        <div><a href="http://keycloak.github.io/docs/userguide/keycloak-server/html/providers.html#d4e458" target="_blank">http://keycloak.github.io/docs/userguide/keycloak-server/html/providers.html#d4e458</a><br>
        </div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On 23 November 2015 at 14:07, Erik
          Mulder <span dir="ltr">&lt;<a href="mailto:erik.mulder@docdatapayments.com" target="_blank">erik.mulder@docdatapayments.com</a>&gt;</span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div text="#000000" bgcolor="#FFFFFF">
              <p><span>Hi Ataraxus,</span></p>
              <p><span><br>
                </span></p>
              <p dir="ltr"><span>I think the way to solve this is
                  &#39;tapping in&#39; to the Wildfly module system. You need to
                  add a module.xml to your provider jar under
                  src/main/resources/modules/some/module/name/module.xml
                  and include a reference to the java mail api there.
                  That way you can tell Wildfly to include that on the
                  classpath when it&#39;s loading your provider classes.<br>
                </span></p>
              <p dir="ltr"><span><br>
                  I&#39;m sorry, but I&#39;m not sure how exactly this works in
                  detail with path names and module.xml contents. You
                  can look at the keycloak sources for module.xml
                  examples, read the Wildfly module system documentation
                  or maybe someone else on the mailing list can answer
                  you in more detail. Good luck!<br>
                  <br>
                </span></p>
              <br>
              <blockquote>
                <div>
                  <div>
                    <div dir="ltr" style="text-align:start">
                      <hr size="1"><font face="Arial" size="2"><b><span style="font-weight:bold">From:</span></b><span> </span>Ataraxus

                        <a href="mailto:atx@binaryninja.de" target="_blank">&lt;atx@binaryninja.de&gt;</a><br>
                        <b><span style="font-weight:bold">To:</span></b><span> </span><a href="mailto:ewjmulder@yahoo.com" target="_blank"></a><a href="mailto:ewjmulder@yahoo.com" target="_blank">&quot;ewjmulder@yahoo.com&quot;</a> <a href="mailto:ewjmulder@yahoo.com" target="_blank"></a><a href="mailto:ewjmulder@yahoo.com" target="_blank">&lt;ewjmulder@yahoo.com&gt;</a><span> </span><br>
                        <b><span style="font-weight:bold">Sent:</span></b><span> </span>Monday,
                        November 23, 2015 1:57 PM<br>
                        <b><span style="font-weight:bold">Subject:</span></b><span> </span>Re:

                        [keycloak-user] Provider Dependencies<br>
                      </font></div>
                    <div>
                      <div>
                        <div><br>
                          <div>
                            <div>Here is the code and the stacktrace
                              just in case, maybe there is a better way
                              to send email:<span> </span><br>
                              <br>
                              private void send(UserModel user,
                              AuthenticationFlowContext context, String
                              subject, String textBody, String htmlBody)
                              throws EmailException {<br>
                                      try {<br>
                                          String address =
                              user.getEmail();<br>
                                          Map&lt;String, String&gt;
                              config =
                              context.getRealm().getSmtpConfig();<br>
                              <br>
                                          Properties props = new
                              Properties();<br>
                                         
                              props.setProperty(&quot;mail.smtp.host&quot;,
                              config.get(&quot;host&quot;));<br>
                              <br>
                                          boolean auth =
                              &quot;true&quot;.equals(config.get(&quot;auth&quot;));<br>
                                          boolean ssl =
                              &quot;true&quot;.equals(config.get(&quot;ssl&quot;));<br>
                                          boolean starttls =
                              &quot;true&quot;.equals(config.get(&quot;starttls&quot;));<br>
                              <br>
                                          if
                              (config.containsKey(&quot;port&quot;)) {<br>
                                             
                              props.setProperty(&quot;mail.smtp.port&quot;,
                              config.get(&quot;port&quot;));<br>
                                          }<br>
                              <br>
                                          if (auth) {<br>
                                             
                              props.put(&quot;mail.smtp.auth&quot;, &quot;true&quot;);<br>
                                          }<br>
                              <br>
                                          if (ssl) {<br>
                                             
                              props.put(&quot;mail.smtp.socketFactory.port&quot;,
                              config.get(&quot;port&quot;));<br>
                                             
                              props.put(&quot;mail.smtp.socketFactory.class&quot;,
                              &quot;javax.net.ssl.SSLSocketFactory&quot;);<br>
                                          }<br>
                              <br>
                                          if (starttls) {<br>
                                             
                              props.put(&quot;mail.smtp.starttls.enable&quot;,
                              &quot;true&quot;);<br>
                                          }<br>
                              <br>
                                          String from =
                              config.get(&quot;from&quot;);<br>
                              <br>
                                          Session session =
                              Session.getInstance(props);<br>
                              <br>
                                          Multipart multipart = new
                              MimeMultipart(&quot;alternative&quot;);<br>
                              <br>
                                          if (textBody != null) {<br>
                                              MimeBodyPart textPart =
                              new MimeBodyPart();<br>
                                              textPart.setText(textBody,
                              &quot;UTF-8&quot;);<br>
                                             
                              multipart.addBodyPart(textPart);<br>
                                          }<br>
                              <br>
                                          if (htmlBody != null) {<br>
                                              MimeBodyPart htmlPart =
                              new MimeBodyPart();<br>
                                             
                              htmlPart.setContent(htmlBody, &quot;text/html;
                              charset=UTF-8&quot;);<br>
                                             
                              multipart.addBodyPart(htmlPart);<br>
                                          }<br>
                              <br>
                                          Message msg = new
                              MimeMessage(session);<br>
                                          msg.setFrom(new
                              InternetAddress(from));<br>
                                          msg.setHeader(&quot;To&quot;, address);<br>
                                          msg.setSubject(subject);<br>
                                          msg.setContent(multipart);<br>
                                          msg.saveChanges();<br>
                                          msg.setSentDate(new Date());<br>
                              <br>
                                          Transport transport =
                              session.getTransport(&quot;smtp&quot;);<br>
                                          if (auth) {<br>
                                             
                              transport.connect(config.get(&quot;user&quot;),
                              config.get(&quot;password&quot;));<br>
                                          } else {<br>
                                              transport.connect();<br>
                                          }<br>
                                          transport.sendMessage(msg, new
                              InternetAddress[]{new
                              InternetAddress(address)});<br>
                                      } catch (Exception e) {<br>
                                          throw new EmailException(e);<br>
                                      }<br>
                                  }<br>
                              <br>
                              connect/auth<br>
                              <br>
                              JBWEB000309: type JBWEB000066: Exception
                              report<br>
                              <br>
                              JBWEB000068: message request path:
                              /auth/realms/MYAPP/protocol/openid-connect/auth<br>
                              <br>
                              JBWEB000069: description JBWEB000145: The
                              server encountered an internal error that
                              prevented it from fulfilling this request.<br>
                              <br>
                              JBWEB000070: exception<br>
                              <br>
                              java.lang.RuntimeException: request path:
/auth/realms/MYAPP/protocol/openid-connect/auth<br>
                                 
org.keycloak.services.filters.KeycloakSessionServletFilter.doFilter(KeycloakSessionServletFilter.java:75)<br>
                              JBWEB000071: root cause<br>
                              <br>
                              org.jboss.resteasy.spi.UnhandledException:
                              java.lang.NoClassDefFoundError:
                              javax/mail/Multipart<br>
                                 
org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException(SynchronousDispatcher.java:364)<br>
                                 
org.jboss.resteasy.core.SynchronousDispatcher.handleException(SynchronousDispatcher.java:232)<br>
                                 
org.jboss.resteasy.core.SynchronousDispatcher.handleInvokerException(SynchronousDispatcher.java:208)<br>
                                 
org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:556)<br>
                                 
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:523)<br>
                                 
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:125)<br>
                                 
org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)<br>
                                 
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)<br>
                                 
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)<br>
                                 
                              javax.servlet.http.HttpServlet.service(HttpServlet.java:847)<br>
                                 
org.keycloak.services.filters.KeycloakSessionServletFilter.doFilter(KeycloakSessionServletFilter.java:61)<br>
                              JBWEB000071: root cause<br>
                              <br>
                              java.lang.NoClassDefFoundError:
                              javax/mail/Multipart<br>
                                 
de.MYAPP.auth.authenticator.MYAPPEmailAuthenticatorFactory.create(MYAPPEmailAuthenticatorFactory.java:27)<br>
                                 
de.MYAPP.auth.authenticator.MYAPPEmailAuthenticatorFactory.create(MYAPPEmailAuthenticatorFactory.java:19)<br>
                                 
org.keycloak.authentication.DefaultAuthenticationFlow.processFlow(DefaultAuthenticationFlow.java:124)<br>
                                 
org.keycloak.authentication.DefaultAuthenticationFlow.processFlow(DefaultAuthenticationFlow.java:97)<br>
                                 
org.keycloak.authentication.AuthenticationProcessor.authenticate(AuthenticationProcessor.java:650)<br>
                                 
org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint.browserAuthentication(AuthorizationEndpoint.java:315)<br>
                                 
org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint.buildAuthorizationCodeAuthorizationResponse(AuthorizationEndpoint.java:265)<br>
                                 
org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint.build(AuthorizationEndpoint.java:123)<br>
                                 
                              sun.reflect.NativeMethodAccessorImpl.invoke0(Native
                              Method)<br>
                                 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)<br>
                                 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>
                                 
                              java.lang.reflect.Method.invoke(Method.java:606)<br>
                                 
org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:168)<br>
                                 
org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:269)<br>
                                 
                              org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:227)<br>
                                 
org.jboss.resteasy.core.ResourceLocator.invokeOnTargetObject(ResourceLocator.java:158)<br>
                                 
                              org.jboss.resteasy.core.ResourceLocator.invoke(ResourceLocator.java:106)<br>
                                 
org.jboss.resteasy.core.ResourceLocator.invokeOnTargetObject(ResourceLocator.java:153)<br>
                                 
                              org.jboss.resteasy.core.ResourceLocator.invoke(ResourceLocator.java:91)<br>
                                 
org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:541)<br>
                                 
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:523)<br>
                                 
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:125)<br>
                                 
org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)<br>
                                 
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)<br>
                                 
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)<br>
                                 
                              javax.servlet.http.HttpServlet.service(HttpServlet.java:847)<br>
                                 
org.keycloak.services.filters.KeycloakSessionServletFilter.doFilter(KeycloakSessionServletFilter.java:61)<br>
                              JBWEB000071: root cause<br>
                              <br>
                              java.lang.ClassNotFoundException:
                              javax.mail.Multipart<br>
                                 
                              java.net.URLClassLoader$1.run(URLClassLoader.java:366)<br>
                                 
                              java.net.URLClassLoader$1.run(URLClassLoader.java:355)<br>
                                 
                              java.security.AccessController.doPrivileged(Native
                              Method)<br>
                                 
                              java.net.URLClassLoader.findClass(URLClassLoader.java:354)<br>
                                 
                              java.lang.ClassLoader.loadClass(ClassLoader.java:425)<br>
                                 
                              java.lang.ClassLoader.loadClass(ClassLoader.java:358)<br>
                                 
de.MYAPP.auth.authenticator.MYAPPEmailAuthenticatorFactory.create(MYAPPEmailAuthenticatorFactory.java:27)<br>
                                 
de.MYAPP.auth.authenticator.MYAPPEmailAuthenticatorFactory.create(MYAPPEmailAuthenticatorFactory.java:19)<br>
                                 
org.keycloak.authentication.DefaultAuthenticationFlow.processFlow(DefaultAuthenticationFlow.java:124)<br>
                                 
org.keycloak.authentication.DefaultAuthenticationFlow.processFlow(DefaultAuthenticationFlow.java:97)<br>
                                 
org.keycloak.authentication.AuthenticationProcessor.authenticate(AuthenticationProcessor.java:650)<br>
                                 
org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint.browserAuthentication(AuthorizationEndpoint.java:315)<br>
                                 
org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint.buildAuthorizationCodeAuthorizationResponse(AuthorizationEndpoint.java:265)<br>
                                 
org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint.build(AuthorizationEndpoint.java:123)<br>
                                 
                              sun.reflect.NativeMethodAccessorImpl.invoke0(Native
                              Method)<br>
                                 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)<br>
                                 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)<br>
                                 
                              java.lang.reflect.Method.invoke(Method.java:606)<br>
                                 
org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:168)<br>
                                 
org.jboss.resteasy.core.ResourceMethod.invokeOnTarget(ResourceMethod.java:269)<br>
                                 
                              org.jboss.resteasy.core.ResourceMethod.invoke(ResourceMethod.java:227)<br>
                                 
org.jboss.resteasy.core.ResourceLocator.invokeOnTargetObject(ResourceLocator.java:158)<br>
                                 
                              org.jboss.resteasy.core.ResourceLocator.invoke(ResourceLocator.java:106)<br>
                                 
org.jboss.resteasy.core.ResourceLocator.invokeOnTargetObject(ResourceLocator.java:153)<br>
                                 
                              org.jboss.resteasy.core.ResourceLocator.invoke(ResourceLocator.java:91)<br>
                                 
org.jboss.resteasy.core.SynchronousDispatcher.getResponse(SynchronousDispatcher.java:541)<br>
                                 
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:523)<br>
                                 
org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:125)<br>
                                 
org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:208)<br>
                                 
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:55)<br>
                                 
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:50)<br>
                                 
                              javax.servlet.http.HttpServlet.service(HttpServlet.java:847)<br>
                                 
org.keycloak.services.filters.KeycloakSessionServletFilter.doFilter(KeycloakSessionServletFilter.java:61)<br>
                              <br>
                              <div>Am 23.11.15 um 13:32 schrieb
                                Ataraxus:<br>
                              </div>
                              <blockquote type="cite" style="margin:1em;display:block">
                                <pre style="font-family:&#39;Courier New&#39;;margin:1em 0px;display:block;white-space:pre-wrap">Hey,

I&#39;m writing my custum login provider which works great so far, but i 
stumbled upon a dependency issue:
I wan&#39;t to use mail in my authenticator, but when the authenticator gets 
actually loaded I get an class not found exception.
Somehow is java.mail.* not available in the classpath of providers which 
are dropped in the configuration/providers path.
How can i use these dependencies? I could include them into my jar, but 
i guess thats not the &quot;right&quot; way.

Thanks
_______________________________________________
keycloak-user mailing list
<a rel="nofollow" href="mailto:keycloak-user@lists.jboss.org" style="margin:0px;padding:0px;text-decoration:underline!important;color:blue;outline:none;background:transparent" target="_blank">keycloak-user@lists.jboss.org</a>
<a rel="nofollow" href="https://lists.jboss.org/mailman/listinfo/keycloak-user" style="margin:0px;padding:0px;text-decoration:underline!important;color:blue;outline:none;background:transparent" target="_blank">https://lists.jboss.org/mailman/listinfo/keycloak-user</a>
</pre>
                              </blockquote>
                              <br>
                            </div>
                          </div>
                          <br>
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </blockquote>
            </div>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
  </div></div></div>

</blockquote></div><br></div>