Klasse CredentialsValidationSecurityCheck implementieren
improve this page | report issueÜbersicht
Diese abstrakte Klasse erweitert ExternalizableSecurityCheck
und implementiert die meisten Methoden dieser Klasse, um die Nutzung zu vereinfachen. Die beiden Methoden validateCredentials
und createChallenge
sind obligatorisch.
Die Klasse CredentialsValidationSecurityCheck
ist für einfache Abläufe gedacht, um
beliebige Berechtigungsnachweise zu validieren, damit der Zugriff auf eine Ressource gewährt werden kann. Es gibt zudem eine integrierte Funktion,
die nach einer Reihe von Versuchen den Zugriff blockiert.
In diesem Lernprogramm wird ein Beispiel für einen fest codierten PIN-Code zum Schutz einer Ressource verwendet, der dem Benutzer drei Versuche einräumt (nach denen die Client-App-Instanz für 60 Sekunden blockiert wird).
Voraussetzung: Sie müssen die Lernprogramme Autorisierungskonzepte und Sicherheitsüberprüfung erstellen durcharbeiten.
Fahren Sie mit folgenden Abschnitten fort:
- Sicherheitsüberprüfung erstellen
- Abfrage erstellen
- Benutzerberechtigungsnachweise validieren
- Sicherheitsüberprüfung konfigurieren
- Beispiel für eine Sicherheitsüberprüfung
Sicherheitsüberprüfung erstellen
Erstellen Sie einen Java-Adapter und fügen Sie eine
Java-Klasse mit der Bezeichnung PinCodeAttempts
hinzu, die CredentialsValidationSecurityCheck
erweitert.
public class PinCodeAttempts extends CredentialsValidationSecurityCheck {
@Override
protected boolean validateCredentials(Map<String, Object> credentials) {
return false;
}
@Override
protected Map<String, Object> createChallenge() {
return null;
}
}
Abfrage erstellen
Wenn die Sicherheitsüberprüfung ausgelöst wird, sendet sie eine Abfrage an den Client. Wenn null
zurückgegeben wird,
wird eine leere Abfrage erstellt, die in einigen Fällen ausreichend sein kann.
Bei Bedarf können Sie Daten mit der Abfrage zurückgeben, z. B. eine anzuzeigende Fehlernachricht oder andere Daten, die vom Client verwendet werden können.
PinCodeAttempts
sendet beispielsweise eine vordefinierte Fehlernachricht und die Anzahl der verbleibenden Versuche.
@Override
protected Map<String, Object> createChallenge() {
Map challenge = new HashMap();
challenge.put("errorMsg",errorMsg);
challenge.put("remainingAttempts",getRemainingAttempts());
return challenge;
}
Die Implementierung von
errorMsg
ist in der Beispielanwendung enthalten.
getRemainingAttempts()
wird von CredentialsValidationSecurityCheck
übernommen.
Benutzerberechtigungsnachweise validieren
Wenn der Client die Antwort auf die Abfrage sendet, wird die Antwort als Zuordnung (Map
) an
validateCredentials
übergeben. Diese Methode sollte Ihre Logik implementieren und true
zurückgeben, wenn die Berechtigungsnachweise gültig sind.
@Override
protected boolean validateCredentials(Map<String, Object> credentials) {
if(credentials!=null && credentials.containsKey("pin")){
String pinCode = credentials.get("pin").toString();
if(pinCode.equals("1234")){
return true;
}
else {
errorMsg = "The pin code is not valid.";
}
}
else{
errorMsg = "The pin code was not provided.";
}
// In allen anderen Fällen sind Berechtigungsnachweise nicht gültig.
return false;
}
Konfigurationsklasse
Sie können einen gültigen PIN-Code auch in der Datei adapter.xml und in der MobileFirst Operations Console konfigurieren.
Erstellen Sie eine neue Java-Klasse, die CredentialsValidationSecurityCheckConfig
erweitert. Es ist wichtig, eine Klasse zu erweitern, die zur übergeordneten Klasse für Sicherheitsüberprüfungen passt, damit die Standardkonfiguration übernommen wird.
public class PinCodeConfig extends CredentialsValidationSecurityCheckConfig {
public String pinCode;
public PinCodeConfig(Properties properties) {
super(properties);
pinCode = getStringProperty("pinCode", properties, "1234");
}
}
Die einzige erforderliche Methode dieser Klasse ist ein Konstruktor, der eine Properties
-Instanz bearbeiten kann. Verwenden Sie die Methode
get[Type]Property
, um eine bestimmte Eigenschaft aus der Datei adapter.xml abzurufen. Wenn kein Wert gefunden wird, definiert der dritte Parameter
einen Wert (1234
).
Sie können mit der Methode addMessage
eine Fehlerbehandlung zu diesem Konstruktor hinzufügen:
public PinCodeConfig(Properties properties) {
// Die übergeordneten Eigenschaften müssen geladen werden.
super(properties);
// Eigenschaft pinCode laden
pinCode = getStringProperty("pinCode", properties, "1234");
// Überprüfung, ob der PIN-Code aus mindestens 4 Zeichen besteht. Auslösung eines Fehlers.
if(pinCode.length() < 4) {
addMessage(errors,"pinCode","pinCode needs to be at least 4 characters");
}
// Überprüfung, ob der PIN-Code numerisch ist. Auslösung einer Warnung.
try {
int i = Integer.parseInt(pinCode);
}
catch(NumberFormatException nfe) {
addMessage(warnings,"pinCode","PIN code contains non-numeric characters");
}
}
Fügen Sie zu Ihrer Hauptklasse (PinCodeAttempts
) die beiden folgenden Methoden hinzu, um die Konfiguration laden zu können:
@Override
public SecurityCheckConfiguration createConfiguration(Properties properties) {
return new PinCodeConfig(properties);
}
@Override
protected PinCodeConfig getConfiguration() {
return (PinCodeConfig) super.getConfiguration();
}
Sie können die Methode getConfiguration().pinCode
verwenden, um den Standard-PIN-Code abzurufen.
Sie können die Methode validateCredentials
so ändern, dass anstelle des fest codierten Wertes der PIN-Code aus der Konfiguration verwendet wird.
@Override
protected boolean validateCredentials(Map<String, Object> credentials) {
if(credentials!=null && credentials.containsKey(PINCODE_FIELD)){
String pinCode = credentials.get(PINCODE_FIELD).toString();
if(pinCode.equals(getConfiguration().pinCode)){
return true;
}
else {
errorMsg = "Pin code is not valid. Hint: " + getConfiguration().pinCode;
}
}
else{
errorMsg = "The pin code was not provided.";
}
// In allen anderen Fällen sind Berechtigungsnachweise nicht gültig.
return false;
}
Sicherheitsüberprüfung konfigurieren
Fügen Sie zu Ihrer Datei adapter.xml ein Element <securityCheckDefinition>
hinzu:
<securityCheckDefinition name="PinCodeAttempts" class="com.sample.PinCodeAttempts">
<property name="pinCode" defaultValue="1234" description="The valid PIN code"/>
<property name="maxAttempts" defaultValue="3" description="How many attempts are allowed"/>
<property name="blockedStateExpirationSec" defaultValue="60" description="How long before the client can try again (seconds)"/>
<property name="successStateExpirationSec" defaultValue="60" description="How long is a successful state valid for (seconds)"/>
</securityCheckDefinition>
Das Attribut name
muss die Sicherheitsüberprüfung benennen. Setzen Sie den Parameter class
auf die Klasse, die Sie zuvor erstellt haben.
Eine Sicherheitsprüfungsdefinition (securityCheckDefinition
) kann null oder mehr property
-Elemente enthalten. Die Eigenschaft
pinCode
ist die in der Konfigurationsklasse PinCodeConfig
definierte Eigenschaft. Die anderen Eigenschaften werden von der Konfigurationsklasse
CredentialsValidationSecurityCheckConfig
übernommen.
Wenn Sie diese Eigenschaften nicht in der Datei adapter.xml angeben, erhalten Sie standardmäßig die von
CredentialsValidationSecurityCheckConfig
festgelegten Standardwerte:
public CredentialsValidationSecurityCheckConfig(Properties properties) {
super(properties);
maxAttempts = getIntProperty("maxAttempts", properties, 1);
attemptingStateExpirationSec = getIntProperty("attemptingStateExpirationSec", properties, 120);
successStateExpirationSec = getIntProperty("successStateExpirationSec", properties, 3600);
blockedStateExpirationSec = getIntProperty("blockedStateExpirationSec", properties, 0);
}
Die Klasse CredentialsValidationSecurityCheckConfig
definiert die folgenden Eigenschaften:
maxAttempts
: Zulässige Anzahl von Versuchen, bis ein Fehler (failure) eintrittattemptingStateExpirationSec
: Intervall (in Sekunden), in dem der Client gültige Berechtigungsnachweise angeben muss. Die Versuche werden gezählt.successStateExpirationSec
: Intervall (in Sekunden), in dem eine gültige Anmeldung stattfinden mussblockedStateExpirationSec
: Intervall (in Sekunden) für die Blockierung des Clients nach dem Erreichen vonmaxAttempts
Beachten Sie, dass blockedStateExpirationSec
standardmäßig auf 0
gesetzt ist.
Wenn der Client ungültige Berechtigungsnachweise sendet, kann er also nach 0 Sekunden einen neuen Versuch unternehmen. Das bedeutet, dass das Feature für die Anzahl von Versuchen
standardmäßig inaktiviert ist.
Beispiel für eine Sicherheitsüberprüfung
Klicken Sie hier, um das Maven-Projekt für Sicherheitsüberprüfungen herunterzuladen.
Das Maven-Projekt enthält eine Implementierung von CredentialsValidationSecurityCheck.
▲Inclusive terminology note: The Mobile First Platform team is making changes to support the IBM® initiative to replace racially biased and other discriminatory language in our code and content with more inclusive language. While IBM values the use of inclusive language, terms that are outside of IBM's direct influence are sometimes required for the sake of maintaining user understanding. As other industry leaders join IBM in embracing the use of inclusive language, IBM will continue to update the documentation to reflect those changes.