UPDATE: Einige Zusammenhang auf das Problem unten. Mein Ziel ist es, Anfragen für Benutzer zu bearbeiten, die bei jeder Anfrage ein Kafka-Thema liefern. Ich verwende Message Hub, der auf Bluemix als Kafka-Provider bereitgestellt wird. Die Anforderungen übergeben die Broker-URL, den Themennamen, den Benutzernamen, das Passwort und den API-Schlüssel. Message Hub auf Bluemix erfordert die JAAS-Authentifizierung und bietet ein Login-Modul mit verschiedenen LoginModule-Implementierungen. Einige basieren auf CallbackHandlern, andere auf CredentialProviders.Klasse Laden für jaas benutzerdefinierte Login-Module in WebSphere Freiheit
Ich nahm das in com.ibm.messagehub.login.MultiUserLoginModule
implementiert ein. Mit diesem Modul soll ich nur einen benutzerdefinierten Credential Provider wie liefern muß:
KafkaClient {
com.ibm.messagehub.login.MultiUserLoginModule required
credentialProvider="myApp.CustomCredentialProvider";
};
Die Herausforderungen sind in den Class-Loader und wie die CustomCredentialProvider können den Benutzername/Passwort von der Anfrage an die MultiUserLoginModule zur Laufzeit übergeben bekommen. Welche Konfiguration muss ich verwenden, um das zu erreichen?
DETAILS: Ich habe eine Web-Anwendung in WebSphere Freiheit 8.5.5 laufen und wollen mit einem Drittanbieter-Dienst authentifizieren. Dieser Drittanbieterdienst implementiert ein JAAS LoginModule mit einem CredentialProvider. Meine Webanwendung erweitert den CredentialProvider um einen CustomCredentialProvider, um Anmeldeinformationen zu übergeben.
Was ich nicht verstehe, ist, wie die Klasse Laden funktionieren soll. Meine server.xml
definiert:
Die Webapplikation
<webApplication id="streaming-service" location="streaming-service.war" name="streaming-service"/>
Die Drittanbieter-Login-Modul
<jaasLoginModule className="com.ibm.messagehub.login.MultiUserLoginModule" controlFlag="REQUIRED" id="KafkaClient" libraryRef="messageHubLoginLib">
<options credentialProvider="myApp.CustomCredentialProvider" serviceName="kafka"/>
</jaasLoginModule>
Die Bibliothek, die die Drittanbieter-Login-Modul
<library id="messageHubLoginLib">
<fileset dir="${server.output.dir}" includes="messagehub.login-1.0.0.jar"/>
</library>
Die Login implementiert Kontext
<jaasLoginContextEntry id="KafkaClient" loginModuleRef="KafkaClient" name="KafkaClient"/>
Das Ergebnis der obigen Konfiguration ist ein ClassNotFoundException für meine CustomCredentialProvider:
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: myApp.CustomCredentialProvider
at com.ibm.messagehub.login.MultiUserLoginModule$MultiUserCallbackHandler.<clinit>(MultiUserLoginModule.java:80)
Wie muss ich meine Konfiguration für die Fremd JAAS Login-Modul ändern myApp.CustomCredentialProvider
in meinem streaming-service
Web-App implementiert zu finden ?
Anmerkung: Ich habe bereits versucht, ein Streaming-service.jar zu erzeugen und sie direkt an die messageHubLoginLib
hinzuzufügen. Das behebt die ClassNotFoundException aber die CustomCredentialProvider-Klasse wird vollständig außerhalb des Kontexts meiner ausgeführten Webanwendung geladen und gibt mir weiterhin keinen Zugriff auf meine An-Meldeinformation.
Sie sagte: „Die CustomCredentialProvider Klasse sollte unabhängig sein zwischen dem Login-Modul und Web-App ", aber das ist in meinem Fall nicht zufrieden. Ich versuche nur, mich mit dem Kafka-Service von Drittanbietern zu authentifizieren. Das LoginModule für diesen Dienst ist mit messagehub.login-1.0.0.jar verfügbar. Die Anmeldeinformationen für diesen Dienst sollten von meinem CustomCredentialProvider stammen. Diese Klasse ist in meiner Streaming-Service-Webanwendung implementiert und bezieht die Kafka-Anmeldeinformationen nur zur Laufzeit. Ich brauche jetzt keine eigene Web-App mit JAAS zu authentifizieren. –