瀏覽代碼

Implemented the method in Proxy to receive a request in microservice

Jean Sumara 5 年之前
父節點
當前提交
786c3bec2a
共有 2 個文件被更改,包括 41 次插入1 次删除
  1. 1 0
      .gitignore
  2. 40 1
      Security/Firewall/OAuthProxyListener.php

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+.idea

+ 40 - 1
Security/Firewall/OAuthProxyListener.php

@@ -90,7 +90,10 @@ class OAuthProxyListener implements ListenerInterface
             $messageLog = "PHP-AUTH (IP: " . $request->getClientIp() . ")";
             // el header contiene php-auth-user && php-auth-pw
             $error = !$this->PHPAuth($request);
-        } elseif ($request->headers->has("authorization")) {
+        } else if($request->headers->has("microservice") && $request->headers->has("authorization")){
+            $messageLog = "AUTHORIZATION A (IP: " . $request->getClientIp() . ")";
+            $error = !$this->PHPMicroservice($request);
+        } elseif ($request->headers->has("authorization") && !$request->headers->has("microservice")) {
             $messageLog = "AUTHORIZATION A (IP: " . $request->getClientIp() . ")";
             // el header contiene authorization
             $error = !$this->PHPAuthorization($request);
@@ -141,6 +144,42 @@ class OAuthProxyListener implements ListenerInterface
         return $this->createCustomOAuthUser($username, $accessToken, $auth_info);
     }
 
+    /**
+     * @param Request $request
+     * @return bool Retorna TRUE si pudo crear y setear el CustomOAuthUser
+     */
+    private function PHPMicroservice($request)
+    {
+        $authorization = $request->headers->get("authorization");
+        $clientId = $request->headers->get('clientid');
+        $clientSecret = $request->headers->get('clientsecret');
+
+        $pieces = explode(' ', $authorization);
+        $accessToken = array(
+            'access_token' => $pieces[1],
+        );
+        if(getenv('OAUTH_CLIENT_ID') != $clientId || getenv('OAUTH_CLIENT_SECRET') != $clientSecret){
+            return false;
+        }
+
+        $auth_info = [
+            'username' => 'Microservice',
+            'roles' => [
+                'ROLE_USER'
+            ],
+            'hasIntercom' => false,
+            'tenancyCurrent' => null,
+            'tenancies' => []
+        ];
+
+        if (isset($auth_info['username'])) {
+            $username = $auth_info['username'];
+            return $this->createCustomOAuthUser($username, $accessToken, $auth_info);
+        } else {
+            return false;
+        }
+    }
+
     /**
      * Crea el custom user.
      * @param string $username