Abfrage-Handler in universellen Windows-8.1-Anwendungen und in Windows-10-UWP-Anwendungen implementieren

improve this page | report issue

Übersicht

Wenn Sie versuchen, auf eine geschützte Ressource zuzugreifen, sendet der Server (die Sicherheitsüberprüfung) eine Liste mit mindestens einer Abfrage an den Client zur Bearbeitung zurück.
Die Liste wird als JSON-Objekt empfangen, in dem die Namen der Sicherheitsüberprüfungen sowie optional weitere JSON-Daten enthalten sind.

{
  "challenges": {
    "SomeSecurityCheck1":null,
    "SomeSecurityCheck2":{
      "some property": "some value"
    }
  }
}

Der Client sollte für jede Sicherheitsüberprüfung einen Abfrage-Handler registrieren.
Der Abfrage-Handler definiert das clientseitige Verhalten für die jeweilige Sicherheitsüberprüfung.

Abfrage-Handler erstellen

Ein Abfrage-Handler ist eine Klasse, die von MobileFirst Server gesendete Abfragen bearbeitet. Er zeigt beispielsweise eine Anmeldeanzeige an, erfasst Berechtigungsnachweise und übermittelt diese an die Sicherheitsüberprüfung.

In diesem Beispiel geht es um die Sicherheitsüberprüfung PinCodeAttempts, die im Abschnitt CredentialsValidationSecurityCheck implementieren definiert wurde. Die von dieser Sicherheitsüberprüfung gesendete Abfrage enthält die verbleibende Anzahl von Anmeldeversuchen (remainingAttempts) und optional eine Fehlernachricht (errorMsg).

Erstellen Sie eine C#-Klasse, die Worklight.SecurityCheckChallengeHandler erweitert:

public class PinCodeChallengeHandler : Worklight.SecurityCheckChallengeHandler
{
}

Abfrage bearbeiten

Die Mindestanforderung der Klasse SecurityCheckChallengeHandler ist, einen Konstruktor zu implementieren sowie eine Methode HandleChallenge, die dafür zuständig ist, den Benutzer zur Angabe der Berechtigungsnachweise aufzufordern. Die Methode HandleChallenge empfängt die Abfrage als Objekt (Object).

Fügen Sie eine Konstruktormethode hinzu:

public PinCodeChallengeHandler(String securityCheck) {
    this.securityCheck = securityCheck;
}

Im folgenden HandleChallenge-Beispiel wird der Benutzer in einem Alert aufgefordert, den PIN-Code einzugeben:

public override void HandleChallenge(Object challenge)
{
    try
    {
      JObject challengeJSON = (JObject)challenge;

      if (challengeJSON.GetValue("errorMsg") != null)
      {
          if (challengeJSON.GetValue("errorMsg").Type == JTokenType.Null)
              errorMsg = "This data requires a PIN Code.\n";
      }

      await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
           async () =>
           {
               _this.HintText.Text = "";
               _this.LoginGrid.Visibility = Visibility.Visible;
               if (errorMsg != "")
               {
                   _this.HintText.Text = errorMsg + "Remaining attempts: " + challengeJSON.GetValue("remainingAttempts");
               }
               else
               {
                   _this.HintText.Text = challengeJSON.GetValue("errorMsg") + "\n" + "Remaining attempts: " + challengeJSON.GetValue("remainingAttempts");
               }

               _this.GetBalance.IsEnabled = false;
           });
    } catch (Exception e)
    {
        Debug.WriteLine(e.StackTrace);
    }
}

Die Implementierung von showChallenge ist in der Beispielanwendung enthalten.

Wenn die Berechtigungsnachweise nicht stimmen, können Sie erwarten, dass das Framework erneut HandleChallenge aufruft.

Antwort auf die Abfrage übergeben

Wenn die Berechtigungsnachweise auf der Benutzerschnittstelle erfasst wurden, verwenden Sie die Methoden ShouldSubmitChallengeAnswer() und GetChallengeAnswer() von SecurityCheckChallengeHandler, um eine Antwort an die Sicherheitsüberprüfung zu senden. ShouldSubmitChallengeAnswer() gibt einen booleschen Wert zurück, der angibt, ob die Antwort auf die Abfrage an die Sicherheitsüberprüfung gesendet werden soll. Im folgenden Beispiel erwartet PinCodeAttempts eine Eigenschaft mit der Bezeichnung pin, die den übergebenen PIN-Code enthält:

public override bool ShouldSubmitChallengeAnswer()
{
  JObject pinJSON = new JObject();
  pinJSON.Add("pin", pinCodeTxt.Text);
  this.challengeAnswer = pinJSON;
  return this.shouldsubmitchallenge;
}

public override JObject GetChallengeAnswer()
{
  return this.challengeAnswer;
}

Abfrage abbrechen

Es kann vorkommen, dass Sie dem Framework mitteilen möchten, dass diese Abfrage komplett verworfen werden soll, z. B., wenn auf eine Schaltfläche Cancel geklickt wird.

Überschreiben Sie zu diesem Zweck wie folgt die Methode ShouldCancel:

public override bool ShouldCancel()
{
  return shouldsubmitcancel;
}

Abfrage-Handler registrieren

Sie müssen das Framework anweisen, dem Abfrage-Handler den Namen einer bestimmten Sicherheitsüberprüfung zuzuordnen, damit der Abfrage-Handler auf dem Empfang der richtigen Abfragen wartet.

Initialisieren Sie den Abfrage-Handler dafür wie folgt mit der Sicherheitsüberprüfung:

PinCodeChallengeHandler pinCodeChallengeHandler = new PinCodeChallengeHandler("PinCodeAttempts");

Anschließend müssen Sie die Abfrage-Handler-Instanz registrieren:

IWorklightClient client = WorklightClient.createInstance();
client.RegisterChallengeHandler(pinCodeChallengeHandler);

Beispielanwendung

Die Beispiele PinCodeWin8 und PinCodeWin10 sind C#-Anwendungen, die ResourceRequest verwenden, um einen Kontostand abzurufen.
Die Methode ist mit meinem PIN-Code geschützt, für den es maximal drei Eingabeversuche gibt.

Klicken Sie hier, um das Maven-Projekt SecurityCheckAdapters herunterzuladen.
Klicken Sie hier, um das Windows-8-Projekt herunterzuladen.
Klicken Sie hier, um das Windows-10-UWP-Projekt herunterzuladen.

Verwendung des Beispiels

Anweisungen finden Sie in der Datei README.md zum Beispiel.

Beispielanwendung

Last modified on September 22, 2017