<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: <module-name></div><div class="gmail_extra"><br><div class="gmail_quote">On 23 November 2015 at 14:44, Ataraxus <span dir="ltr"><<a href="mailto:atx@binaryninja.de" target="_blank">atx@binaryninja.de</a>></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't worked :( <br>
I'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'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>
<?xml version="1.0" encoding="UTF-8"?><br>
<module xmlns=<a>"urn:jboss:module:1.1"</a>
name="de.MYAPP.auth.authenticator"><br>
<resources><br>
<resource-root path="MYAPP.authenticator.jar"/><br>
</resources><br>
<dependencies><br>
<module name="org.keycloak.keycloak-core"/><br>
<module name="org.keycloak.keycloak-model-api"/><br>
<module name="org.keycloak.keycloak-events-api"/><br>
<module name="org.keycloak.keycloak-services"/><br>
<module name="org.keycloak.keycloak-services"/><br>
<module name="org.keycloak.keycloak-login-api"/><br>
<module name="org.jboss.logging.jboss-logging"/><br>
<module name="javax.mail.mail"/><br>
</dependencies><br>
</module><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"><<a href="mailto:erik.mulder@docdatapayments.com" target="_blank">erik.mulder@docdatapayments.com</a>></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
'tapping in' 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's loading your provider classes.<br>
</span></p>
<p dir="ltr"><span><br>
I'm sorry, but I'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"><atx@binaryninja.de></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">"ewjmulder@yahoo.com"</a> <a href="mailto:ewjmulder@yahoo.com" target="_blank"></a><a href="mailto:ewjmulder@yahoo.com" target="_blank"><ewjmulder@yahoo.com></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<String, String>
config =
context.getRealm().getSmtpConfig();<br>
<br>
Properties props = new
Properties();<br>
props.setProperty("mail.smtp.host",
config.get("host"));<br>
<br>
boolean auth =
"true".equals(config.get("auth"));<br>
boolean ssl =
"true".equals(config.get("ssl"));<br>
boolean starttls =
"true".equals(config.get("starttls"));<br>
<br>
if
(config.containsKey("port")) {<br>
props.setProperty("mail.smtp.port",
config.get("port"));<br>
}<br>
<br>
if (auth) {<br>
props.put("mail.smtp.auth", "true");<br>
}<br>
<br>
if (ssl) {<br>
props.put("mail.smtp.socketFactory.port",
config.get("port"));<br>
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");<br>
}<br>
<br>
if (starttls) {<br>
props.put("mail.smtp.starttls.enable",
"true");<br>
}<br>
<br>
String from =
config.get("from");<br>
<br>
Session session =
Session.getInstance(props);<br>
<br>
Multipart multipart = new
MimeMultipart("alternative");<br>
<br>
if (textBody != null) {<br>
MimeBodyPart textPart =
new MimeBodyPart();<br>
textPart.setText(textBody,
"UTF-8");<br>
multipart.addBodyPart(textPart);<br>
}<br>
<br>
if (htmlBody != null) {<br>
MimeBodyPart htmlPart =
new MimeBodyPart();<br>
htmlPart.setContent(htmlBody, "text/html;
charset=UTF-8");<br>
multipart.addBodyPart(htmlPart);<br>
}<br>
<br>
Message msg = new
MimeMessage(session);<br>
msg.setFrom(new
InternetAddress(from));<br>
msg.setHeader("To", address);<br>
msg.setSubject(subject);<br>
msg.setContent(multipart);<br>
msg.saveChanges();<br>
msg.setSentDate(new Date());<br>
<br>
Transport transport =
session.getTransport("smtp");<br>
if (auth) {<br>
transport.connect(config.get("user"),
config.get("password"));<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:'Courier New';margin:1em 0px;display:block;white-space:pre-wrap">Hey,
I'm writing my custum login provider which works great so far, but i
stumbled upon a dependency issue:
I wan'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 "right" 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>