diff --git a/.env.example b/.env.example
index 31f6cfa8321a1f58d93eb7eda3030150e13de386..60c2490b5f848097294eacc9ce4279992d40b4f2 100644
--- a/.env.example
+++ b/.env.example
@@ -2,4 +2,7 @@ DB_NAME=
 DB_HOST=localhost
 DB_PORT=3306
 DB_PASSWORD=
-DB_USER=root
\ No newline at end of file
+DB_USER=root
+
+PHP_API_KEY=""
+REST_API_KEY=""
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index e028101feb8679d9eba1c28230592580c5715d2b..6f4b0a2ebe09d5ad28f0ef1ef2ba6bef1a8685e3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,6 +37,12 @@
             <artifactId>tika-core</artifactId>
             <version>2.9.1</version>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/at.favre.lib/bcrypt -->
+        <dependency>
+            <groupId>at.favre.lib</groupId>
+            <artifactId>bcrypt</artifactId>
+            <version>0.10.2</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/src/main/java/org/soapService/Handlers/ClientHandler.java b/src/main/java/org/soapService/Handlers/ClientHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..68250a4979e7d6f5643f15ae77f5551ff79911fb
--- /dev/null
+++ b/src/main/java/org/soapService/Handlers/ClientHandler.java
@@ -0,0 +1,54 @@
+package org.soapService.Handlers;
+
+import at.favre.lib.crypto.bcrypt.BCrypt;
+import io.github.cdimascio.dotenv.Dotenv;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.handler.MessageContext;
+import javax.xml.ws.handler.soap.SOAPHandler;
+import javax.xml.ws.handler.soap.SOAPMessageContext;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+public class ClientHandler implements SOAPHandler<SOAPMessageContext> {
+    public Set<QName> getHeaders() {
+        return null;
+    }
+
+    public boolean handleMessage(SOAPMessageContext context) {
+        Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
+
+        if (!outboundProperty) {
+            Map<String, List<String>> headers = (Map<String, List<String>>) context.get(MessageContext.HTTP_REQUEST_HEADERS);
+
+
+            if (headers.get("token") == null) {
+                return false;
+            }
+
+            Dotenv dotenv = Dotenv.load();
+
+            BCrypt.Result resultREST = BCrypt.verifyer().verify(headers.get("token").get(0).toCharArray(), dotenv.get("REST_API_KEY"));
+            System.out.println("REST Client: " + resultREST.verified);
+
+            BCrypt.Result resultPHP = BCrypt.verifyer().verify(headers.get("token").get(0).toCharArray(), dotenv.get("PHP_API_KEY"));
+            System.out.println("PHP Client: " + resultPHP.verified);
+
+            if (!resultREST.verified && !resultPHP.verified) {
+                return false;
+            }
+
+            context.put("client", resultREST.verified ? "REST" : "PHP");
+        }
+        return true;
+    }
+
+    public boolean handleFault(SOAPMessageContext context) {
+        return false;
+    }
+
+    public void close(MessageContext context) {
+
+    }
+}
diff --git a/src/main/java/org/soapService/Handlers/Handler.java b/src/main/java/org/soapService/Handlers/LogHandler.java
similarity index 92%
rename from src/main/java/org/soapService/Handlers/Handler.java
rename to src/main/java/org/soapService/Handlers/LogHandler.java
index 47b2d7552d55106ee419f99ba8120bcb2a736ec2..87a70d7dbbf7c7ea14a5f0165fcf296bebba5704 100644
--- a/src/main/java/org/soapService/Handlers/Handler.java
+++ b/src/main/java/org/soapService/Handlers/LogHandler.java
@@ -18,7 +18,7 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
 
-public class Handler implements SOAPHandler<SOAPMessageContext> {
+public class LogHandler implements SOAPHandler<SOAPMessageContext> {
     //    public static ThreadLocal<Log> threadLocal = new ThreadLocal<>();
     private static LogRepository logRepository = new LogRepository();
 
@@ -62,7 +62,7 @@ public class Handler implements SOAPHandler<SOAPMessageContext> {
 
             // Format
             // [ClientName] -> [arg0]: <arg0_value>; [arg1]: <arg1_value>
-            String requestDescription = "[ClientName] ->" + (!args.isEmpty() ? " " : " No Args");
+            String requestDescription = "[" + context.get("client") + "] ->" + (!args.isEmpty() ? " " : " No Args");
             for (Map.Entry<String, String> entry : args.entrySet()) {
                 requestDescription += "[" + entry.getKey() + "]:";
                 requestDescription += entry.getValue() + "; ";
diff --git a/src/main/resources/handler-chain.xml b/src/main/resources/handler-chain.xml
index 5c9fd12565af52c125f8f55dec106414ec8123be..f9a14bd02b6b5e5ccba3c81f809548b4d6d35a03 100644
--- a/src/main/resources/handler-chain.xml
+++ b/src/main/resources/handler-chain.xml
@@ -1,8 +1,12 @@
 <jws:handler-chains xmlns:jws="http://java.sun.com/xml/ns/javaee">
     <jws:handler-chain>
         <jws:handler>
-            <jws:handler-name>Handler</jws:handler-name>
-            <jws:handler-class>org.soapService.Handlers.Handler</jws:handler-class>
+            <jws:handler-name>LogHandler</jws:handler-name>
+            <jws:handler-class>org.soapService.Handlers.LogHandler</jws:handler-class>
+        </jws:handler>
+        <jws:handler>
+            <jws:handler-name>ClientHandler</jws:handler-name>
+            <jws:handler-class>org.soapService.Handlers.ClientHandler</jws:handler-class>
         </jws:handler>
     </jws:handler-chain>
 </jws:handler-chains>
\ No newline at end of file