diff --git a/pom.xml b/pom.xml
index f9cdd8d..170884d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,6 +69,10 @@
 		</dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-data-ldap</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-oauth2-client</artifactId>
 		</dependency>
 		<dependency>
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/api/AuthNAuthApi.java b/src/main/java/org/eclipse/openk/contactbasedata/api/AuthNAuthApi.java
index 76e7799..ca7355c 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/api/AuthNAuthApi.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/api/AuthNAuthApi.java
@@ -14,6 +14,7 @@
 */
 package org.eclipse.openk.contactbasedata.api;
 
+import org.eclipse.openk.contactbasedata.model.KeyCloakUser;
 import org.eclipse.openk.contactbasedata.viewmodel.UserModule;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -32,4 +33,7 @@
 
     @GetMapping(value= "/portal/rest/beservice/userModulesForUser")
     List<UserModule> getUserModulesForUser(@RequestHeader("Authorization") String token );
+
+    @GetMapping(value= "/portal/rest/beservice/users")
+    List<KeyCloakUser> getKeycloakUsers(@RequestHeader("Authorization") String token );
 }
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/controller/LdapController.java b/src/main/java/org/eclipse/openk/contactbasedata/controller/LdapController.java
new file mode 100644
index 0000000..a0f91e2
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/controller/LdapController.java
@@ -0,0 +1,58 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+ */
+package org.eclipse.openk.contactbasedata.controller;
+
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.contactbasedata.service.LdapUserService;
+import org.eclipse.openk.contactbasedata.viewmodel.LdapUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+
+@Log4j2
+@RestController
+@RequestMapping("/ldap")
+public class LdapController {
+
+    @Autowired
+    private LdapUserService ldapUserService;
+
+    @ApiOperation(value = "Ermitteln der UserModules vom Auth'n'Auth-Service")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
+    @ResponseStatus(HttpStatus.OK)
+    @GetMapping( "/users")
+    public List<LdapUser> getLdapUser() {
+        return ldapUserService.getAllLdapUsers();
+    }
+
+    @ApiOperation(value = "Ermitteln der UserModules vom Auth'n'Auth-Service")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
+    @ResponseStatus(HttpStatus.OK)
+    @GetMapping( "/sync")
+    public String syncLdapUser() {
+        ldapUserService.synchronize();
+        return  "";
+    }
+
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/controller/UserModuleController.java b/src/main/java/org/eclipse/openk/contactbasedata/controller/UserController.java
similarity index 69%
rename from src/main/java/org/eclipse/openk/contactbasedata/controller/UserModuleController.java
rename to src/main/java/org/eclipse/openk/contactbasedata/controller/UserController.java
index eced874..0ba1a58 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/controller/UserModuleController.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/controller/UserController.java
@@ -18,7 +18,8 @@
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
 import lombok.extern.log4j.Log4j2;
-import org.eclipse.openk.contactbasedata.service.UserModuleService;
+import org.eclipse.openk.contactbasedata.model.KeyCloakUser;
+import org.eclipse.openk.contactbasedata.service.UserService;
 import org.eclipse.openk.contactbasedata.viewmodel.UserModule;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -29,19 +30,25 @@
 
 @Log4j2
 @RestController
-@RequestMapping("/user-modules")
-public class UserModuleController {
+@RequestMapping("/user")
+public class UserController {
 
     @Autowired
-    private UserModuleService userModuleService;
+    private UserService userService;
 
     @ApiOperation(value = "Ermitteln der UserModules vom Auth'n'Auth-Service")
     @ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
-    @GetMapping
+    @GetMapping("/modules")
     public List<UserModule> getUserModules() {
-        return userModuleService.getUserModules();
+        return userService.getUserModules();
     }
 
+    @ApiOperation(value = "Ermitteln der der KeycloakUsers vom Auth'n'Auth-Service")
+    @ApiResponses(value = {@ApiResponse(code = 200, message = "Erfolgreich durchgeführt")})
+    @GetMapping("/keycloak-users")
+    public List<KeyCloakUser> getKeycloakUsers() {
+        return userService.getKeycloakUsers();
+    }
 
 
 
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/model/KeyCloakUser.java b/src/main/java/org/eclipse/openk/contactbasedata/model/KeyCloakUser.java
new file mode 100644
index 0000000..d1277c1
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/model/KeyCloakUser.java
@@ -0,0 +1,97 @@
+/**
+******************************************************************************
+* Copyright © 2017-2018 PTA GmbH.
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* 
+*     http://www.eclipse.org/legal/epl-v10.html
+* 
+******************************************************************************
+*/
+package org.eclipse.openk.contactbasedata.model;
+
+import java.util.List;
+import java.util.Map;
+
+public class KeyCloakUser {
+    private String id;
+    private long createdTimestamp;
+    private String username;
+    private boolean enabled;
+    private boolean totp;
+    private boolean emailVerified;
+    private String firstName;
+    private String lastName;
+    private String name;
+    private List<String> realmRoles;
+    private Map<String, List<String>> clientRoles;
+
+    private List<String> disableableCredentialTypes;
+    private List<String> requiredActions;
+
+    public String getId() { return id; }
+    public void setId(String id) { this.id = id; }
+
+    public long getCreatedTimestamp() { return createdTimestamp; }
+    public void setCreatedTimestamp(long createdTimestamp) { this.createdTimestamp = createdTimestamp; }
+
+    public String getUsername() { return username; }
+    public void setUsername(String username) { this.username = username; }
+
+    public void setTotp(boolean totp) { this.totp = totp; }
+
+    public void setEmailVerified(boolean emailVerified) { this.emailVerified = emailVerified; }
+
+    public String getFirstName() { return firstName; }
+    public void setFirstName(String firstName) { this.firstName = firstName; }
+
+    public String getLastName() { return lastName; }
+    public void setLastName(String lastName) { this.lastName = lastName; }
+
+    public List<String> getDisableableCredentialTypes() {
+        return disableableCredentialTypes;
+    }
+    public void setDisableableCredentialTypes(List<String> disableableCredentialTypes) { this.disableableCredentialTypes = disableableCredentialTypes; }
+
+    public List<String> getRequiredActions() {
+        return requiredActions;
+    }
+    public void setRequiredActions(List<String> requiredActions) { this.requiredActions = requiredActions; }
+
+    public boolean isEnabled() {
+        return enabled;
+    }
+
+    public boolean isTotp() {
+        return totp;
+    }
+
+    public boolean isEmailVerified() {
+        return emailVerified;
+    }
+
+    public List<String> getRealmRoles() {
+        return realmRoles;
+    }
+
+    public void setRealmRoles(List<String> realmRoles) {
+        this.realmRoles = realmRoles;
+    }
+
+    public Map<String, List<String>> getClientRoles() {
+        return clientRoles;
+    }
+
+    public void setClientRoles(Map<String, List<String>> clientRoles) {
+        this.clientRoles = clientRoles;
+    }
+
+    public void setName() {
+        if (lastName!= null && !lastName.isEmpty()){
+            this.name = firstName+ " " + lastName;
+        } else {
+            this.name = firstName;
+        }
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/repository/InternalPersonRepository.java b/src/main/java/org/eclipse/openk/contactbasedata/repository/InternalPersonRepository.java
index 22348d0..1ea4525 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/repository/InternalPersonRepository.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/repository/InternalPersonRepository.java
@@ -21,6 +21,7 @@
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 
+import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 
@@ -37,4 +38,5 @@
 
     Page<TblInternalPerson> findByContact_anonymizedFalseOrContact_anonymizedIsNull(Pageable pageable); // NOSONAR fd 07.02.2020: Method name cannot be changed
 
+    List<TblInternalPerson> findByUidNotNull();
 }
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java
new file mode 100644
index 0000000..d52408d
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapService.java
@@ -0,0 +1,110 @@
+/*
+ *******************************************************************************
+ * Copyright (c) 2019 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *******************************************************************************
+*/
+package org.eclipse.openk.contactbasedata.service;
+
+import org.eclipse.openk.contactbasedata.api.AuthNAuthApi;
+import org.eclipse.openk.contactbasedata.viewmodel.LdapUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
+import org.springframework.ldap.core.*;
+import org.springframework.ldap.support.LdapNameBuilder;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.stereotype.Service;
+
+import javax.naming.Name;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Base64;
+import java.util.List;
+
+@Service
+public class LdapService {
+
+    @Autowired
+    InternalPersonService internalPersonService;
+
+    @Autowired
+    private AuthNAuthApi authNAuthApi;
+
+    @Autowired
+    private Environment env;
+
+    @Autowired
+    private ContextSource contextSource;
+
+    @Autowired
+    private LdapTemplate ldapTemplate;
+
+    public void authenticate(final String username, final String password) {
+        contextSource.getContext("cn=" + username + ",ou=users," + env.getRequiredProperty("ldap.partitionSuffix"), password);
+    }
+
+    public List<String> search(final String username) {
+        return ldapTemplate.search(
+                "ou=users",
+                "cn=" + username,
+                (AttributesMapper<String>) attrs -> (String) attrs
+                        .get("cn")
+                        .get());
+    }
+
+    public void create(final String username, final String password) {
+        Name dn = LdapNameBuilder
+                .newInstance()
+                .add("ou", "users")
+                .add("cn", username)
+                .build();
+        DirContextAdapter context = new DirContextAdapter(dn);
+
+        context.setAttributeValues("objectclass", new String[] { "top", "person", "organizationalPerson", "inetOrgPerson" });
+        context.setAttributeValue("cn", username);
+        context.setAttributeValue("sn", username);
+        context.setAttributeValue("userPassword", digestSHA(password));
+
+        ldapTemplate.bind(context);
+    }
+
+    public void modify(final String username, final String password) {
+        Name dn = LdapNameBuilder
+                .newInstance()
+                .add("ou", "users")
+                .add("cn", username)
+                .build();
+        DirContextOperations context = ldapTemplate.lookupContext(dn);
+
+        context.setAttributeValues("objectclass", new String[] { "top", "person", "organizationalPerson", "inetOrgPerson" });
+        context.setAttributeValue("cn", username);
+        context.setAttributeValue("sn", username);
+        context.setAttributeValue("userPassword", digestSHA(password));
+
+        ldapTemplate.modifyAttributes(context);
+    }
+
+    private String digestSHA(final String password) {
+        String base64;
+        try {
+            MessageDigest digest = MessageDigest.getInstance("SHA");
+            digest.update(password.getBytes());
+            base64 = Base64
+                    .getEncoder()
+                    .encodeToString(digest.digest());
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException(e);
+        }
+        return "{SHA}" + base64;
+    }
+
+
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/LdapUserService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapUserService.java
new file mode 100644
index 0000000..424c28a
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/LdapUserService.java
@@ -0,0 +1,82 @@
+package org.eclipse.openk.contactbasedata.service;
+import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.contactbasedata.model.TblInternalPerson;
+import org.eclipse.openk.contactbasedata.repository.InternalPersonRepository;
+import org.eclipse.openk.contactbasedata.service.util.LdapUserAttributesMapper;
+import org.eclipse.openk.contactbasedata.viewmodel.LdapUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ldap.core.LdapTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import static org.springframework.ldap.query.LdapQueryBuilder.query;
+
+@Log4j2
+@Service
+public class LdapUserService {
+
+    @Autowired
+    LdapUserAttributesMapper ldapUserAttributesMapper;
+
+    @Autowired
+    private InternalPersonRepository internalPersonRepository;
+
+    @Autowired
+    private InternalPersonService internalPersonService;
+
+    @Autowired
+    private LdapTemplate ldapTemplate;
+
+    /**
+     * Retrieves all the persons in the ldap server, using {@link LdapUserAttributesMapper}
+     * @return list of persons
+     */
+    public List<LdapUser> getAllLdapUsers() {
+        return ldapTemplate.search(query()
+                .where("objectclass").is("person"), ldapUserAttributesMapper);
+    }
+
+    public void synchronize() {
+        List<TblInternalPerson> internalPersonList = internalPersonRepository.findByUidNotNull();
+
+        Map<String, TblInternalPerson> uidToInternalPersonMap = internalPersonList.stream().collect(
+                Collectors.toMap(TblInternalPerson::getUid, Function.identity()));
+
+        List<LdapUser> allLdapUsers = getAllLdapUsers();
+
+        List<TblInternalPerson> internalPersonListSynchronized = new ArrayList<>();
+        for (LdapUser ldapUser : allLdapUsers) {
+            TblInternalPerson tblInternalPerson = uidToInternalPersonMap.get(ldapUser.getUid());
+            if (tblInternalPerson == null) continue;
+            boolean attributesChanged = mapLdapUserToInternaPerson(tblInternalPerson, ldapUser);
+            if (attributesChanged) {
+                internalPersonListSynchronized.add(tblInternalPerson);
+            }
+        }
+
+        internalPersonRepository.saveAll(internalPersonListSynchronized);
+    }
+
+    private boolean mapLdapUserToInternaPerson(TblInternalPerson tblInternalPerson, LdapUser ldapUser) {
+        boolean attributesChanged = false;
+        if (!Objects.equals(tblInternalPerson.getFirstName(), ldapUser.getFirstName())
+                || !Objects.equals(tblInternalPerson.getLastName(), ldapUser.getLastName() )
+                || !Objects.equals(tblInternalPerson.getTitle(), ldapUser.getTitle() )
+                || !Objects.equals(tblInternalPerson.getDepartment(), ldapUser.getDepartment())) {
+            attributesChanged = true;
+            tblInternalPerson.setFirstName(ldapUser.getFirstName());
+            tblInternalPerson.setLastName(ldapUser.getLastName());
+            tblInternalPerson.setTitle(ldapUser.getTitle());
+            tblInternalPerson.setDepartment(ldapUser.getDepartment());
+        }
+        return attributesChanged;
+    }
+
+
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/UserModuleService.java b/src/main/java/org/eclipse/openk/contactbasedata/service/UserService.java
similarity index 68%
rename from src/main/java/org/eclipse/openk/contactbasedata/service/UserModuleService.java
rename to src/main/java/org/eclipse/openk/contactbasedata/service/UserService.java
index b0c9dc4..c0d96cb 100644
--- a/src/main/java/org/eclipse/openk/contactbasedata/service/UserModuleService.java
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/UserService.java
@@ -15,20 +15,32 @@
 package org.eclipse.openk.contactbasedata.service;
 
 import org.eclipse.openk.contactbasedata.api.AuthNAuthApi;
+import org.eclipse.openk.contactbasedata.model.KeyCloakUser;
 import org.eclipse.openk.contactbasedata.viewmodel.UserModule;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
 
 @Service
-public class UserModuleService {
+public class UserService {
     @Autowired
     private AuthNAuthApi authNAuthApi;
 
+    @Value("${jwt.staticJwt}")
+    private String staticJwt;
+
     public List<UserModule> getUserModules() {
         String bearerToken = (String)SecurityContextHolder.getContext().getAuthentication().getDetails();
         return authNAuthApi.getUserModulesForUser(bearerToken);
     }
+
+    public List<KeyCloakUser> getKeycloakUsers() {
+        //String bearerToken = (String)SecurityContextHolder.getContext().getAuthentication().getDetails();
+        Object details = SecurityContextHolder.getContext().getAuthentication().getDetails();
+        String bearerToken = staticJwt;
+        return authNAuthApi.getKeycloakUsers(bearerToken);
+    }
 }
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/service/util/LdapUserAttributesMapper.java b/src/main/java/org/eclipse/openk/contactbasedata/service/util/LdapUserAttributesMapper.java
new file mode 100644
index 0000000..2738cc2
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/service/util/LdapUserAttributesMapper.java
@@ -0,0 +1,89 @@
+package org.eclipse.openk.contactbasedata.service.util;
+
+import lombok.extern.log4j.Log4j2;
+import org.eclipse.openk.contactbasedata.viewmodel.LdapUser;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.ldap.core.AttributesMapper;
+import org.springframework.stereotype.Component;
+
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+
+/**
+ * Custom person attributes mapper, maps the attributes to the person POJO
+ */
+@Log4j2
+@Component
+public class LdapUserAttributesMapper implements AttributesMapper {
+
+    /*
+    Config in yaml example (variable : attributeName in LDAP):
+    ----------------------
+    uid: uid
+    fullname: cn
+    lastname: sn
+    firstname: givename
+    title: title
+    mail: mail
+    ----------------------
+    */
+
+    @Value("${ldap.uid}")
+    private String uid;
+
+    @Value("${ldap.fullname}")
+    private String fullname;
+
+    @Value("${ldap.lastname}")
+    private String lastname;
+
+    @Value("${ldap.firstname}")
+    private String firstname;
+
+    @Value("${ldap.title}")
+    private String title;
+
+    @Value("${ldap.mail}")
+    private String mail;
+
+    @Value("${ldap.password}")
+    private String password;
+
+
+    @Override
+    public LdapUser mapFromAttributes(Attributes attributes) throws NamingException {
+        LdapUser ldapUser = new LdapUser();
+
+        Attribute attribute = attributes.get(uid);
+        if (attribute != null) {
+            ldapUser.setUid((String) attribute.get());
+        }
+        attribute = attributes.get(fullname);
+        if (attribute != null) {
+            ldapUser.setFullName((String) attribute.get());
+        }
+        attribute = attributes.get(lastname);
+        if (attribute != null) {
+            ldapUser.setLastName((String) attribute.get());
+        }
+        attribute = attributes.get(firstname);
+        if (attribute != null) {
+            ldapUser.setFirstName((String) attribute.get());
+        }
+        attribute = attributes.get(title);
+        if (attribute != null) {
+            ldapUser.setTitle((String) attribute.get());
+        }
+        attribute = attributes.get(mail);
+        if (attribute != null) {
+            ldapUser.setMail((String) attribute.get());
+        }
+        attribute = attributes.get(password);
+        if (attribute != null) {
+            ldapUser.setPassword((byte[]) attribute.get());
+        }
+
+        return ldapUser;
+    }
+}
diff --git a/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/LdapUser.java b/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/LdapUser.java
new file mode 100644
index 0000000..6b1601b
--- /dev/null
+++ b/src/main/java/org/eclipse/openk/contactbasedata/viewmodel/LdapUser.java
@@ -0,0 +1,110 @@
+package org.eclipse.openk.contactbasedata.viewmodel;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import javax.naming.Name;
+import java.nio.charset.StandardCharsets;
+
+//@Entry(base = "ou=users", objectClasses = { "person", "inetOrgPerson", "top" })
+public class LdapUser {
+
+    @JsonIgnore
+    private Name dn;
+
+    private String uid;
+    private String fullName;
+    private String firstName;
+    private String lastName;
+    private String title;
+    private String department;
+    private String mail;
+    private byte[] password;
+
+    public LdapUser() {
+    }
+
+    public LdapUser(String uid, String password) {
+    }
+
+    public Name getDn() {
+        return dn;
+    }
+
+    public void setDn(Name dn) {
+        this.dn = dn;
+    }
+
+    public String getUid() {
+        return uid;
+    }
+
+    public void setUid(String uid) {
+        this.uid = uid;
+    }
+
+    public String getFullName() {
+        return fullName;
+    }
+
+    public void setFullName(String fullName) {
+        this.fullName = fullName;
+    }
+
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    public String getDepartment() {
+        return department;
+    }
+
+    public void setDepartment(String department) {
+        this.department = department;
+    }
+
+    public byte[] getPassword() {
+        return password;
+    }
+
+    public void setPassword(byte[] password) {
+        this.password = password;
+    }
+
+    public void setPassword2(String password) {
+        this.password = password.getBytes(StandardCharsets.UTF_8);
+    }
+
+    public String getMail() {
+        return mail;
+    }
+
+    public void setMail(String mail) {
+        this.mail = mail;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    @Override
+    public String toString() {
+        return uid;
+    }
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index b1a50e9..774100c 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -17,6 +17,21 @@
     password: cbd_service
   flyway:
     enabled: false
+  ldap:
+    base: o=sevenSeas
+    username: uid=admin,ou=system
+    password: secret
+    port: 10389
+    urls: ldap://entopkon:10389
+
+ldap:
+  uid: uid
+  fullname: cn
+  lastname: sn
+  firstname: givenname
+  title: title
+  mail: mail
+  password: userpassword
 
 server:
   max-http-header-size: 262144
