Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 19 Next »

Als Datenquelle für die Zugangsdaten wird eine Datenbanktabelle verwendet.

  • Name der Datenbanktabelle - Der Tabellenname kann frei gewählt werden - in dieser Dokumentation USER.
  • Pflichtfelder - Folgende Datenfelder müssen vorhanden sein: 
    • USERNAME | String - Speichert den Benutzernamen als String.
    • PASSWORD | byte - Speichert das Passwort, i.d.R. verschlüsselt als Byte-Array.
  • Weitere Datenfelder - Die Tabelle kann bei Bedarf auch weitere Datenfelder enthalten, da diese für die Authentifizierung nicht relevant sind. 
Hinweis:
  • USER Tabelle bereits in der Datenbank vorhanden - Zu Ihrer USER Tabelle benötigen Sie ein entsprechendes User Entity mit dazugehörigem UserDAO. Falls in Ihrem Projekt Management > Entites noch kein User Entity vorhanden ist, können Sie dieses inklusive DAO mit der Import-Funktion Create JPA entities from table generieren lassen.


  1. User Entity bereits vorhanden - Wählen Sie Ihr bereits vorhandenes User Entity aus.
    Noch kein User Entity vorhanden - Klicken Sie auf /wiki/spaces/DOC/pages/31850645 um ein neues Entity User inklusive DAO UserDAO anzulegen. 
  2. Wählen Sie bei Mapping > Username das Attribut zur Speicherung des Benutzernamens aus.
  3. Wählen Sie bei Mapping > Password das Attribut zur Speicherung des Passworts aus.
  4. Wählen Sie bei Settings den Verschlüsselungs-Algorythmus für das Passwort aus, z.B. PBKDF2WithHmacSHA1.
  5. Klicken Sie auf Finish.

Weiter mit Autorisierung

/wiki/spaces/DOC/pages/31850703 - Für das neue Entity User muss eine entsprechende Tabelle USER in der Datenbank angelegt werden. Dafür bietet Ihne RapidClipse eine Export-Funktion.

Optionen:
  • MD5 - Message Digest Algorithm ist eine Hashfunktion, die aus einem Passwort einen 128-Bit-Hashwert erzeugt. Gilt jedoch als nicht mehr sicher.

    // Example RapidClipse
    cb9086f37a2e96bd5e4507f869888261
  • SHA1 - Secure Hash Algorithm 1 ist eine Hashfunktion, die aus einem Passwort einen 160-Bit-Hashwert erzeugt. 

    // Example RapidClipse
    64d88c018c7ced7e248e42b48593bd82c5e80ef2
  • SHA2 - Secure Hash Algorithm 2 ist der aktuell empfohlene Standard für SHA, die aus einem Passwort einen 224-, 256-, 384- oder 512-Bit-Hashwert erzeugt.

    // Example RapidClipse
    eafa795b8ffea05d1c8a7d5142bd4dd50fea3dd447f3585071e5c8b2ef525cef
  • PBKDF2WithHmacSHA1 - Kombination aus PBKDF2, HMAC und SHA1, die einen 160-Bit-Hahswert erzeugt. PBKDF2 (Password-Based Key Derivation Function 2) ist eine genormte Funktion für die Ableitung eines Schlüssels aus einem Passwort und wird oft für die passwort-basierte Authentifizierung benutzt. HMAC (Keyed-Hash Message Authentication Code) ist ein Message Authentication Code (MAC), dessen Konstruktion auf einer kryptografischen Hash-Funktion basiert. SHA1 ist eine Hashfunktion, die aus einem Passwort einen 160-Bit-Hashwert erzeugt. 

    // Example RapidClipse
    eafa795b8ffea05d1c8a7d5142bd4dd50fea3dd447f3585071e5c8b2ef525cef
Ergebnis:
  • Project Management > Entities - Es wird die Entity-Klasse User.java mit den Attributen username vom Typ String sowie password vom Typ byte[] generiert oder durch Auswahl ein bereits existierendes Entity verwendet. 

    EntityAttributeDatentypErklärung
    UserusernameStringSpeichert den Benutzernamen als String.
    passwordbyte[]Speichert das Passwort, i.d.R. verschlüsselt als Byte-Array.
  • Project Management > Data Access - Es wird die DAO-Klasse UserDAO.java generiert. Bei Auswahl eines bereits existierenden Entities wird kein neues DAO generiert. 

  • Project Management > Business Objects - Es wird die Klasse ExampleAuthenticationProvider.java generiert.

    package com.company.example.business;
    
    import com.company.example.entities.User;
    import com.xdev.security.authentication.Authenticator;
    import com.xdev.security.authentication.AuthenticatorProvider;
    import com.xdev.security.authentication.CredentialsUsernamePassword;
    import com.xdev.security.authentication.jpa.JPAAuthenticator;
    import com.xdev.security.authentication.jpa.HashStrategy.PBKDF2WithHmacSHA1;
    
    public class ExampleAuthenticationProvider
    		implements AuthenticatorProvider<CredentialsUsernamePassword, CredentialsUsernamePassword> {
    	private static ExampleAuthenticationProvider INSTANCE;
    
    	public static ExampleAuthenticationProvider getInstance() {
    		if (INSTANCE == null) {
    			INSTANCE = new ExampleAuthenticationProvider();
    		}
    
    		return INSTANCE;
    	}
    
    	private JPAAuthenticator authenticator;
    
    	private ExampleAuthenticationProvider() {
    	}
    
    	@Override
    	public Authenticator<CredentialsUsernamePassword, CredentialsUsernamePassword> provideAuthenticator() {
    		if (this.authenticator == null) {
    			this.authenticator = new JPAAuthenticator(User.class);
    			this.authenticator.setHashStrategy(new PBKDF2WithHmacSHA1());
    		}
    
    		return this.authenticator;
    	}
    }
Example:
  • Passwort verschlüsselt speichern

    String password = this.passwordField.getValue();
    byte[] encryptedPassword = new HashStrategy.SHA2().hashPassword(pw.getBytes());
    
    User user = new User();
    user.setUsername(this.textField.getValue());
    user.setPassword(encryptedPassword);
    
    try 
    {
    	new UserDAO().save(user);
    } 
    catch (Exception e) {
    	Notification.show("Error", Type.ERROR_MESSAGE);
    }
  • No labels