Toewijzing van geheimen aan configuratie OSGi

Om geheime waarden in de dienst bloot te stellen OSGi, hen in kaart brengen aan configuraties OSGi gebruikend OSGi geheime configuratiewaarden. Definieer de eigenschapnaam OSGi als sleutel om de geheime waarde van de SecretsManager.getSecret() methode terug te winnen.

Definieer de geheimen in het OSGi-configuratiebestand /apps/example/osgiconfig/config/com.example.core.util.impl.SecretsManagerImpl.cfg.json in uw AEM Maven-project. Elke eigenschap vertegenwoordigt een geheim dat in AEM wordt weergegeven, met de waarde ingesteld via Cloud Manager. De sleutel is de OSGi bezitsnaam, die wordt gebruikt om de geheime waarde van de SecretsManager dienst terug te winnen.

{
    "api.key": "$[secret:api_key]",
    "service.password": "$[secret:service_password]"
}

Alternatief aan het gebruiken van de gedeelde geheime dienst OSGi, kunt u geheimen in de configuratie OSGi van de specifieke diensten direct omvatten die hen gebruiken. Deze benadering is nuttig wanneer de geheimen slechts door één enkele dienst OSGi nodig zijn en niet over de veelvoudige diensten worden gedeeld. In dit geval, worden de geheime waarden bepaald in het OSGi configuratiedossier voor de specifieke dienst en in de code van Java van de dienst via de @Activate methode betreden.

Verbruiksgeheimen

De geheimen kunnen van de dienst worden verbruikt OSGi op diverse manieren, zoals van een het Verschilderen Model of een andere dienst OSGi. Hieronder staan voorbeelden van hoe u geheimen van beide kunt consumeren.

Van verkoopmodel

Sling Models bieden vaak bedrijfslogica voor AEM-sitecomponenten. De service SecretsManager OSGi kan worden gebruikt via de @OsgiService -annotatie en worden gebruikt in het Sling-model om de geheime waarde op te halen.

import com.example.core.util.SecretsManager;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.servlets.SlingHttpServletRequest;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.OsgiService;

@Model(
    adaptables = {SlingHttpServletRequest.class, Resource.class},
    adapters = {ExampleDatabaseModel.class}
)
public class ExampleDatabaseModelImpl implements ExampleDatabaseModel {

    @OsgiService
    SecretsManager secretsManager;

    @Override
    public String doWork() {
        final String secret = secretsManager.getSecret("api.key");
        // Do work with secret
    }
}

Van OSGi-service

De diensten OSGi stellen vaak herbruikbare bedrijfslogica binnen AEM bloot, die door het Verschilderen Modellen, de diensten van AEM zoals Workflows, of andere douaneOSGi diensten wordt gebruikt. De service SecretsManager OSGi kan via de @Reference -annotatie worden gebruikt en binnen de OSGi-service worden gebruikt om de geheime waarde op te halen.

import com.example.core.util.SecretsManager;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

@Component
public class ExampleSecretConsumerImpl implements ExampleSecretConsumer {

    @Reference
    SecretsManager secretsManager;

    public void doWork() {
        final String secret = secretsManager.getSecret("service.password");
        // Do work with the secret
    }
}