customPasswordEncryption-Provider entwickeln
Sie können einen customPasswordEncryption-Provider entwickeln, um angepasste Berechtigungsentscheidungen für J2EE-Anwendungen (Java™ Platform, Enterprise Edition) (J2EE) durch Implementierung der im Liberty-Server bereitgestellten Schnittstelle com.ibm.wsspi.security.crypto.CustomPasswordEncryption zu treffen.
Informationen zu diesem Vorgang
- OSGi-Bundledatei, die die ausführbare Datei enthält.
- Featuremanifestdatei, die das Benutzerfeature des customPasswordEncryption-Providers definiert. Diese Datei enthält die Position der erforderlichen Bundles und Attribute des Features sowie die Erweiterungsmanifestdatei, sofern diese gepackt ist. Diese Informationen werden von der Serverlaufzeitumgebung verarbeitet.
- Erweiterungsmanifestdatei, die die erforderlichen Bundledateien und den Namen der Implementierungsklasse des customPasswordEncryption-Providers definiert. Diese Datei ist optional und für die Unterstützung der Befehlszeilendienstprogramme erforderlich.
Vorgehensweise
- Erstellen Sie eine OSGi-Komponente, die einen Service bereitstellt, der die Schnittstelle com.ibm.wsspi.security.crypto.CustomPasswordEncryption implementiert.
Die Schnittstelle CustomPasswordEncryption definiert drei Methoden: decrypt (wird von der Liberty-Serverlaufzeit aufgerufen, um die Zeichenfolge zu entschlüsseln), encrypt (wird von der Liberty-Serverlaufzeit aufgerufen, um die Zeichenfolge zu verschlüsseln) und initialize (für eine zukünftige Verwendung reserviert).
Im folgenden Beispiel werden Annotationen für OSGi Declarative Services verwendet:package com.mycompany.custom; import org.osgi.service.component.ComponentContext; import org.osgi.service.component.annotations.Activate; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.ConfigurationPolicy; import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.component.annotations.Modified; import com.ibm.wsspi.security.crypto.CustomPasswordEncryption; import com.ibm.wsspi.security.crypto.EncryptedInfo; import com.ibm.wsspi.security.crypto.PasswordDecryptException; import com.ibm.wsspi.security.crypto.PasswordEncryptException; /** */ @Component(service = CustomPasswordEncryption.class, immediate = true, name = "com.mycompany.CustomPasswordEncryptionImpl", configurationPolicy = ConfigurationPolicy.OPTIONAL, property = { "someKey=someValue" }) public class CustomPasswordEncryptionImpl implements CustomPasswordEncryption { @Activate protected synchronized void activate(ComponentContext cc, Map<String, Object> props) { } @Modified protected synchronized void modify(Map<String, Object> props) { } @Deactivate protected void deactivate(ComponentContext cc) {} /** * Die Verschlüsselung verwendet eine mit UTF-8 codierte Zeichenfolge in Form eines byte[]. * Das byte[] wird von String.getBytes("UTF-8") generiert. Die Implementierung * im EncryptedInfo-Objekt gibt ein verschlüsseltes byte[] zurück. * Außerdem wird ein logischer Schlüsselalias in EncryptedInfo zurückgegeben, * der an die Verschlüsselungsmethode zurückübergeben wird, um festzustellen, mit welchem * Schlüssel dieses Kennwort verschlüsselt wurde. Der * WebSphere Application Server-Laufzeitumgebung ist nicht bekannt, mit welchem * Algorithmus oder Schlüssel die Daten verschlüsselt wurden. * * @param decrypted_bytes * @return com.ibm.wsspi.security.crypto.EncryptedInfo * @throws com.ibm.wsspi.security.crypto.PasswordEncryptException **/ @Override public EncryptedInfo encrypt(byte[] input) throws PasswordEncryptException { byte[] output = null; String key = null; try { : <do some encryption> : return new EncryptedInfo(output, key); } catch (Exception e) { throw new PasswordEncryptException("Exception is caught", e); } } /** * Die Entschlüsselung verwendet das EncryptedInfo-Objekt mit dem byte[] * und dem Alias des logischen Schlüssels und wandelt es in das * entschlüsselte byte[] um. Die WebSphere Application Server-Laufzeitumgebung * wandelt das byte[] * mit new String (byte[], "UTF-8") in eine Zeichenfolge um. * * @param info * @return byte[] * @throws PasswordEncryptException * @throws com.ibm.wsspi.security.crypto.PasswordDecryptException **/ @Override public byte[] decrypt(EncryptedInfo info) throws PasswordDecryptException { byte[] input = info.getEncryptedBytes(); String key = info.getKeyAlias(); byte[] output = null; try { : <do some decryption> : return output; } catch (Exception e) { throw new PasswordEncryptException("Exception is caught", e); } } /** * Die folgende Zeile ist für eine zukünftige Verwendung reserviert und wird * derzeit nicht von der WAS-Laufzeitumgebung aufgerufen. * * @param initialization_data **/ @SuppressWarnings("rawtypes") @Override public void initialize(Map initialization_data) {} }
- Packen Sie die Komponente in ein OSGi-Bundle, das Bestandteil Ihres Benutzerfeatures ist. Vergewissern Sie sich, dass das Bundle
das OSGi-Service-Manifest enthält. Das folgende Beispiel zeigt den Inhalt des OSGi-Service-Manifests:
<?xml version="1.0" encoding="UTF-8"?> <scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="com.mycompany.custom.CustomPasswordEncryptionImpl" configuration-policy="optional" immediate="true" activate="activate" deactivate="deactivate" modified="modify"> <implementation class="com.mycompany.custom.CusomPasswordEncryptionImpl"/> <service> <provide interface="com.ibm.wsspi.security.crypto.CustomPasswordEncryption"/> </service> <property name="<someKey>" type="String" value="<someValue>"/> </scr:component>
- Stellen Sie sicher, dass Ihre Featuremanifestdatei den OSGi-Subsysteminhalt mit
start-phase:="SERVICE_EARLY" enthält. Nach Abschluss des optionalen Schritts ist die Position
der Erweiterungsmanifestdatei im Header Subsystem-Content. Beispiel:
Manifest-Version: 1.0 IBM-Feature-Version: 2 IBM-ShortName: customPasswordEncryption-1.0 Subsystem-Type: osgi.subsystem.feature Subsystem-Version: 1.0.0 Subsystem-ManifestVersion: 1.0 Subsystem-SymbolicName: customPasswordEncryption-1.0;visibility:=public Subsystem-Content: com.mycompany.custom; version="[1,1.0.100)"; start-phase:="SERVICE_EARLY", customEncryption.jar; type=file; \ location:="bin/tools/extensions/ws-customPasswordEncryption/customEncryption.jar” Subsystem-Description: MyCompany custom password encryption
- Nachdem das Feature im Verzeichnis der benutzerspezifischen Produkterweiterung installiert wurde, konfigurieren Sie die Datei server.xml mit dem Featurenamen.
<featureManager> ... <feature>usr:customPasswordEncryption-1.0</feature> </featureManager>
Vergewissern Sie sich, dass die Nachricht CWWKS1850I in der Datei message.log protokolliert wurde, um sicherzustellen, dass die Installation für die Serverlaufzeitumgebung erfolgreich war.
- Optional: Erstellen Sie die Erweiterungsmanifestdatei, die für die Einbindung des
customPasswordEncryption-Providers in die Befehlszeilendienstprogramme, wie z. B.
SecurityUtility, erforderlich ist. Die Erweiterungsmanifestdatei ist eine JAR-Datei, die die Datei
MANIFEST.MF enthält. Die erforderlichen Header des Erweiterungsmanifest sind im Folgenden beschrieben:p
- Require-Bundle: Definiert die Liste der Bundles, die geladen werden müssen. Das Format ist dasselbe wie bei der OSGi-Bundlemanifestdatei.
- IBM-ImplementationClass: Definiert die Implementierungsklasse, die die Schnittstelle com.ibm.wsspi.security.crypto.CustomPasswordEncryption implementiert.
Im Folgenden sehen Sie eine Beispieldatei MANIFEST.MF:
Require-Bundle: com.mycompany.custom; version="[1,1.0.100)"; location="usr/extension/lib" IBM-ImplementationClass: com.mycompany.custom.CusomPasswordEncryptionImpl
Verwenden Sie den Befehl jar, um die Erweiterungsmanifestdatei zu packen, z. B.:jar cfm customEncryption.jar MANIFEST.MF
Kopieren Sie die JAR-Datei in wlp/bin/tools/extensions/ws-customPasswordEncryption. Stellen Sie sicher, dass die Position der Erweiterungsmanifestdatei im Headerabschnitt Subsystem-Content der Featuremanifestdatei angegeben ist.
Diese Dateien müssen sich in bestimmten Verzeichnissen befinden. Im Folgenden ist die Beziehung zwischen den Dateien beschrieben:Abbildung 1. customPassworedEncryption-Providerdateien - Optional: Nach Abschluss von Schritt 5 können Sie mit dem folgenden Befehlszeilendienstprogrammbefehl prüfen, ob die Installation erfolgreich war:
wlp/bin/securityUtility encode --listCustom
Als Ausgabe werden die Informationen von customPasswordEncryption erwartet, z. B.:ö[{"name":"custom","featurename":"usr:customPasswordEncryption-1.0","description":"MyCompany custom password encryption"}]
Stellen Sie sicher, dass alle erforderlichen Dateien vorhanden sind und dass der Inhalt der Dateien richtig ist.


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_developing_custom_passwd_encrypt
Dateiname: twlp_developing_custom_passwd_encrypt.html