<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
</head>
<body 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 class="moz-txt-link-rfc2396E" href="urn:jboss:module:1.1">"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 class="moz-cite-prefix">Am 23.11.15 um 14:18 schrieb Stian
Thorgersen:<br>
</div>
<blockquote
cite="mid:CAJgngAfTPouO3f1ZuHsvhv65Yhp9hYTwHm8Y+z6zPho9=qdLyQ@mail.gmail.com"
type="cite">
<div dir="ltr">Just look at Keycloak documentation:
<div><a moz-do-not-send="true"
href="http://keycloak.github.io/docs/userguide/keycloak-server/html/providers.html#d4e458">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 moz-do-not-send="true"
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"
style="margin:0px;padding:0px;text-align:start;display:block;color:rgb(0,0,0);font-family:HelveticaNeue,'Helvetica
Neue',Helvetica,Arial,'Lucida
Grande',sans-serif;font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><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
style="color:rgb(0,0,0);font-family:HelveticaNeue,'Helvetica
Neue',Helvetica,Arial,'Lucida
Grande',sans-serif;font-size:13px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">
<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 moz-do-not-send="true"
href="mailto:atx@binaryninja.de"
target="_blank"><atx@binaryninja.de></a><br>
<b><span style="font-weight:bold">To:</span></b><span> </span><a
moz-do-not-send="true"
href="mailto:ewjmulder@yahoo.com"
target="_blank"><a class="moz-txt-link-rfc2396E" href="mailto:ewjmulder@yahoo.com">"ewjmulder@yahoo.com"</a></a> <a
moz-do-not-send="true"
href="mailto:ewjmulder@yahoo.com"
target="_blank"><a class="moz-txt-link-rfc2396E" href="mailto:ewjmulder@yahoo.com"><ewjmulder@yahoo.com></a></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 class="h5">
<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 moz-do-not-send="true" 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 moz-do-not-send="true" 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>
</body>
</html>