Wie verwenden Sie die Benutzerdefinierte Externe Authentifizierung

Die benutzerdefinierte externe Authentifizierung erlaubt es andere Non-Windows Authentifizierungssysteme wie LDAP zu verwenden. Um diese Authentifizierungsmethode zu verwenden, muss ein spezifisches Interface implementiert werden indem die [OaAuthMethodUserdefined ]-Klasse implementiert wird. Wie Sie die Klasse implementieren und welche Methoden Sie aufrufen sowie was Sie sonst berücksichtigen sollen, um die benutzerdefinierte Klasse zu verwenden, wird im Folgenden beschrieben:

  1. Sie finden alle unterhalb aufgelisteten Methoden in der OaAuthMethodUserdefined-Klasse.Speichern Sie die Klasse im scripts\libs\classes\auth-Verzeichnis Ihres Projektes. Implementieren Sie die [OaAuthMethodUserdefined]-Klasse indem Sie die folgenden Methoden in Ihrer Klasse verwenden und implementieren. Die meisten Methoden müssen nicht geändert werden. Die vollständige Klasse finden Sie weiter unten in diesem Kapitel.
  • OaAuthMethodUserdefined(): LÖSCHEN SIE NICHT DEN EXISTIERENDEN CODE IN DIESER METHODE! Siehe die Klassenbeschreibung am Ende dieses Kapitels für den Konstruktor.
  • isEnabled(): Ändern Sie den Rückgabewert auf TRUE.
  • checkUserPassword(): Die Methode muss die Passwortüberprüfung implementieren.
  • create(): Die Methode instanziert ein Objekt der Klasse OaAuthMethodUserdefined. -> ÄNDERN SIE NICHT DIE METHODE! Für die create()-Methode siehe die Klassenbeschreibung am Ende dieses Kapitels. Die Methode ist nicht dokumentiert, weil sie nicht geändert werden muss.
  • getName(): Die Methode liefert den Namen der Authentifizierungsmethode zurück. -> DIE METHODE SOLL NICHT GEÄNDERT WERDEN!
  • getAuthType(): Liefert den Authentifizierungstyp der Klasse zurück -> DIE METHODE SOLL NICHT GEÄNDERT WERDEN!
  • getMustCreateUser(): Implementieren Sie die Methode, wenn nach einem erfolgreichen Login-Vorgang ein Benutzer in WinCC OA angelegt werden soll.

Methoden, die für die serverseitige Authentifizierung für UI-Manager implementiert werden müssen:

  1. Um die Benutzerdefinierte Authentifizierung zu verwenden, öffnen Sie das Benutzerverwaltungspanel über System Management -> Berechtigung -> Benutzerverwaltung. In der Benutzerverwaltung selektieren Sie die Option "Userdefined" aus der "Benutzerverwaltung"-Combobox. Beachten Sie, dass wenn die Option nicht verfügbar ist, überprüfen Sie, dass die Methode isEnabled() implementiert wurde oder starten Sie den UI-Manager neu. Die Benutzerdefinierte Authentifizierung wird aktiviert.
  2. Öffnen Sie das benutzerdefinierte Login-Panel über die WinCC OA-Konsole: -p vision/loginUserdefined.pnl

    Die Benutzerdefinierte Authentifizierung wird verwendet.

Anmerkung: In dem StartPanel eines redundanten Projektes muss die Funktion initHosts() dann aufgerufen werden, wenn nicht mit dem Login- oder Systemmanagement-Panel gestartet wird. Die initHosts()-Funktion definiert dabei die erforderlichen globalen Variablen.
Anmerkung: Beachten Sie, dass die reservierten Wörter: Standard und Windows nicht für die benutzerdefinierte Klasse als Name verwendet werden dürfen!
Anmerkung: Wenn die benutzerdefinierte Authentifizierung verwendet wird, muss die Meldung für die Benutzerverwaltungscombobox der Benutzerverwaltung in der Messagekatalogdatei "userMan" unter wincc_oa_path\msg\[Sprache] hinzugefügt werden. Dafür muss der Eintrag suretoswitchext2 eingefügt werden und z.B. eine Meldung wie in der Windows-Klasse "Alle in WinCC OA definierten Benutzer werden entfernt und die in Windows definierten Benutzer übernommen. Wirklich umschalten?" verwendet werden, wenn die OaAuthMethodUserdefined-Klasse auch alle Benutzer entfernt. Passiert das nicht, sollte die Meldung entsprechend angepasst werden.
/** OaAuthMethod is a base class for all authentication functions.*/
#uses "classes/auth/OaAuthMethod"
class OaAuthMethodUserdefined: OaAuthMethod
{
  /**
  ATTENTION: Don't remove existing code in this function (this.authType = OaAuthenticationType::Userdefined;)
  This is the constructor of the OaAuthMethodUserdefined class. Add the functionality
  that should be done in the OaAuthMethodUserdefined
  constructor to the constructor of the class.
  */
  public OaAuthMethodUserdefined()
  {
    this.authType = OaAuthenticationType::Userdefined;
  }
  /**
  ATTENTION: The isEnabled() function must be changed for the Userdefined class.
  The class implements an authentication method.
  This function returns FALSE by default. Therefore, the Userdefined class cannot
  be loaded from the user administration panel ud_main.pnl
  if the Userdefined class should be used, this function must return TRUE.
  @return bool
  */
  public static bool isEnabled()
  {
    return FALSE;
  }
  /**
  ATTENTION: The function checkUserPassword() must be changed for the Userdefined
  class to implement the authentication method via the
  Userdefined class.
  The checkUserPassword function must implement a password check for the user.
  If the check is successful, a unique sessionId has to be returned via the sessionID
  parameter and the return value must be OaAuthenticationError::None.
  In case of failure the sessionID parameter must be an empty string and the return
  value must be of type OaAuthenticationError Enum.
  For creating a sessionID use the inherited function: createSessionId(string username)
  @param user ... must be of type OaAuthUser
  @param password ... contains the entered password as a string
  @param sessionID ... return parameter
  @return
  */
  public OaAuthenticationError checkUserPassword(anytype user/*must be of type OaAuthUser*/,
  string password, string &sessionID)
  {
    return OaAuthenticationError::None;
  }
  /**
  ATTENTION: The function getHttpPermissions() needs to be changed for the Userdefined
  class to work with ServerSideAuth (server-side authentication).
  See base class OaAuthMethod for an implementation example.
  @param bAllowUnknownUsers ... return value that defines if unknown users are
  allowed
  @param bCheckPassword ... return value that defines if password should be checked
  @param bAllowDisabledUsers ... return value that defines if disabled users are
  allowed
  */
  public void getHttpPermissions(bool &bAllowUnknownUsers, bool &bCheckPassword,
  bool &bAllowDisabledUsers)
  {
    return;
  }
  /**
  If the functionality of the base class OaAuthMethod is sufficient, this class
  must be deleted. If another way to enabled ServerSideAuth needs to be implemented,
  implement it here.
  @return bool
  */
  public bool isServerSideAuthEnabled()
  {
    //     bool httpAuth = FALSE;
    //     httpAuth = (1 == paCfgReadValueDflt(getPath(CONFIG_REL_PATH)+"config",
    "webClient", "serverSideAuth", 0));
    //     return httpAuth; // Deactivated by default
  }
  /**
  ATTENTION: Function must not be changed
  The function isServerSideAuthEnabled() is used by the factory class to instantiate
  an object of the
  OaAuthMethodUserdefined class.
  @return an object of the OaAuthMethodUserdefined class
  */
  public static OaAuthMethod create()
  {
    OaAuthMethodUserdefined auth;
    return auth;
  }
  /**
  ATTENTION: Function should not be changed. Change the name of the authentication
  method in the OaLogin.cat catalog file in the msg directory. The function returns
  the name of the authentication method. The name displayed in the user administration panel.
  @return "Userdefined"
  */
  public static string getName()
  {
    return "Userdefined";
  }
  /**
  ATTENTION: Function should not be changed.
  Returns the authentication type of the class
  @return OaAuthenticationType::Userdefined
  */
  public OaAuthenticationType getAuthType()
  {
    return OaAuthenticationType::Userdefined;
  }
  /**
  Additional Functions of the base class that can be implemented in this class
  are:
  * externalUserExists(string username);
  * getAllGroups();
  * getDomain();
  * getExternalId(string &externalId, string username = "");
  * getGroupsForExternalId(string externalId, dyn_string &groups);
  * getTimeout();
  * logout();
  * setAllGroups();
  * ssoEnabled();
  * passwordResetEnabled();
  * deleteUsersOnActivate();
  * mustCreateUser();
  For further information on the functions, see the function documentation in the
  OaAuthMethod base class.
  */
};