0

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.

Antwort

0

Generieren eines Streaming-service.jar und fügen Sie es direkt an den messageHubLoginLib sollte der richtige Weg zu tun. In diesem Fall haben Sie eine JAR-Datei, die zwischen Ihrem JAAS-Anmeldemodul und der Webanwendung gemeinsam genutzt werden kann.

Allerdings sagte man „CustomCredentialProvider Klasse ist völlig außerhalb des Kontextes meiner laufenden Web-Anwendung geladen und gibt mir immer noch keinen Zugang mein Beglaubigungsschreiben“. Es klingt, als ob Sie versuchen, die Berechtigung in der CustomCredentialProvider-Klasse für die Verwendung zwischen dem Anmeldemodul und der Webanwendung zu speichern.

Die CustomCredentialProvider-Klasse sollte zwischen dem Login-Modul und der Web-App unabhängig sein. Wenn eine Anfrage eingeht und versucht, auf die Web-App zuzugreifen, löst der Server das Login-Modul zur Authentifizierung aus. Wenn es bestanden wird, wird der Zugriff auf die Web-App erfolgreich sein.

Ich sehe dich nicht gepostet. Kann es sein, dass Ihnen folgende Konfiguration fehlt?

<jaasLoginContextEntry id="system.WEB_INBOUND" name="system.WEB_INBOUND" loginModuleRef="KafkaClient,hashtable,certificate,token" /> 
+0

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. –

0

Können legen Sie die MultiUserLoginModule und CustomCredentialProvider JAR-Datei in dem $ {server.config.dir}/lib/global-Verzeichnis und den libraryRef Punkt in Ihrer Datei server.xml auf globales Verzeichnis ändern, wie folgend:

<jaasLoginModule className="com.ibm.messagehub.login.MultiUserLoginModule" controlFlag="REQUIRED" id="KafkaClient" libraryRef="global"> 
    <options credentialProvider="myApp.CustomCredentialProvider" serviceName="kafka"/> 
    </jaasLoginModule> 
3

Sie waren fast mit dem separaten Streaming-Service.jar. Hier sind alle Schritte, die benötigt werden.

  1. Identifizieren Sie die Klassen (aus Ihrer App), die für das Login-Modul sichtbar sein müssen.
  2. Setzen Sie alle diese Klassen in Ihre messageHubLoginLib (z. B. in einem separaten streaming-service.jar)
  3. LÖSCHEN Sie diese Klassen aus Ihrer App.
  4. Konfigurieren Sie die App mit einem Class-Loader Kind-Element, das die Login-Modulbibliothek mit einem commonLibraryRef Attribut verweist:

<webApplication id="streaming-service" location="streaming-service.war" name="streaming-service"> 
 
    <classloader commonLibraryRef="messageHubLoginLib" /> 
 
</webApplication>

Verwandte Themen