• 01-07-2022, 10:55:51
    #1
    Merhaba;

    Çoklu platformu olan bir uygulama için php tarafında token kontrolü yapıyoruz. Token olarak Bearer Token kullanıyoruz local de hiç bir sıkıntı olmadan kullanabiliyoruz sistem istediğimiz gibi çalışıyor ancak pleks panel yüklü olan sunucumuz da bu işlemi yapmak istediğimiz de token bilgisine kodta erişemiyoruz.

    Token bilgisini aşağıdaki kodlar ile çekiyoruz;
    function getAuthorizationHeader()
    {
        $headers = null;
        if (isset($_SERVER['Authorization'])) {
            $headers = trim($_SERVER["Authorization"]);
        } else if (isset($_SERVER['HTTP_AUTHORIZATION'])) { //Nginx or fast CGI
            $headers = trim($_SERVER["HTTP_AUTHORIZATION"]);
        } elseif (function_exists('apache_request_headers')) {
            $requestHeaders = apache_request_headers();
            // Server-side fix for bug in old Android versions (a nice side-effect of this fix means we don't care about capitalization for Authorization)
            $requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders));
            //print_r($requestHeaders);
            if (isset($requestHeaders['Authorization'])) {
                $headers = trim($requestHeaders['Authorization']);
            }
        }
        return $headers;
    }
    function getBearerToken()
    {
        $$headers = getAuthorizationHeader();
        // HEADER: Get the access token from the header
        if (!empty($headers)) {
            if (preg_match('/Bearer\s(\S+)/', $headers, $matches)) {
                return $matches[1];
            }
        }
        return null;
    }
    internette de araştırma yaptığımız da bunun dışında bir yöntem bulamadık stackoverflow da da bu konu sorulmuş ve cevap olarak yukarıdaki kod verilmiş ancak biz local dışında çalıştıramadık sunucu taraflı php ini de veya apache server ayarlarından aktif edilmesi gereken bir ayarmı vardır acaba ? konu hakkında yardımlarınızı rica ederim.

    Teşekkürler, iyi çalışmalar.
  • 01-07-2022, 11:24:58
    #2
    emiru9396 adlı üyeden alıntı: mesajı görüntüle
    Merhaba;

    Çoklu platformu olan bir uygulama için php tarafında token kontrolü yapıyoruz. Token olarak Bearer Token kullanıyoruz local de hiç bir sıkıntı olmadan kullanabiliyoruz sistem istediğimiz gibi çalışıyor ancak pleks panel yüklü olan sunucumuz da bu işlemi yapmak istediğimiz de token bilgisine kodta erişemiyoruz.

    Token bilgisini aşağıdaki kodlar ile çekiyoruz;
    function getAuthorizationHeader()
    {
        $headers = null;
        if (isset($_SERVER['Authorization'])) {
            $headers = trim($_SERVER["Authorization"]);
        } else if (isset($_SERVER['HTTP_AUTHORIZATION'])) { //Nginx or fast CGI
            $headers = trim($_SERVER["HTTP_AUTHORIZATION"]);
        } elseif (function_exists('apache_request_headers')) {
            $requestHeaders = apache_request_headers();
            // Server-side fix for bug in old Android versions (a nice side-effect of this fix means we don't care about capitalization for Authorization)
            $requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders));
            //print_r($requestHeaders);
            if (isset($requestHeaders['Authorization'])) {
                $headers = trim($requestHeaders['Authorization']);
            }
        }
        return $headers;
    }
    function getBearerToken()
    {
        $$headers = getAuthorizationHeader();
        // HEADER: Get the access token from the header
        if (!empty($headers)) {
            if (preg_match('/Bearer\s(\S+)/', $headers, $matches)) {
                return $matches[1];
            }
        }
        return null;
    }
    internette de araştırma yaptığımız da bunun dışında bir yöntem bulamadık stackoverflow da da bu konu sorulmuş ve cevap olarak yukarıdaki kod verilmiş ancak biz local dışında çalıştıramadık sunucu taraflı php ini de veya apache server ayarlarından aktif edilmesi gereken bir ayarmı vardır acaba ? konu hakkında yardımlarınızı rica ederim.

    Teşekkürler, iyi çalışmalar.
    Tokeni belki getirip set etmek için geçen süre yeterli değildir, asenkron çalıştırıp veriyi set edip etmediğini kontrol edebilirsiniz. Token için izinli bir durum yok onu sadece header alanına ekliyorsunuz. Genelde böyle şeylerde problem asenkron çalışmadığı için yaşanıyor.
  • 01-07-2022, 11:30:36
    #3
    gurbuzemre adlı üyeden alıntı: mesajı görüntüle
    Tokeni belki getirip set etmek için geçen süre yeterli değildir, asenkron çalıştırıp veriyi set edip etmediğini kontrol edebilirsiniz. Token için izinli bir durum yok onu sadece header alanına ekliyorsunuz. Genelde böyle şeylerde problem asenkron çalışmadığı için yaşanıyor.
    Merhaba, set ediliyor token ancak php ile header tarafından çekemiyor token bilgisini sırf tokeni alıp tokeni cevap olarak döndüğüm istek oluşturdum php tarafında ancak tokeni çekemiyor hiç bir şekilde kodta tek satır farklılık olmadan birebir localimde çalışıyor ancak sunucu da çalışmıyor header kısmı boş dönüyor ancak istek içerisinde tanımlanmış bir durumda
  • 01-07-2022, 11:45:16
    #4
    2 tane $$ değil de 1 tane ile çalıştırmayı deneyin.
    $headers = getAuthorizationHeader();
  • 01-07-2022, 11:48:38
    #5
    eypoffcl adlı üyeden alıntı: mesajı görüntüle
    2 tane $$ değil de 1 tane ile çalıştırmayı deneyin.
    $headers = getAuthorizationHeader();
    hocam buraya atarken yanlış yazmışım ama sunucu da çalışan kod "$headers = getAuthorizationHeader();" şeklinde sunucumdaki kodların hiç birinde $$ durumu yok tekrar dan emin olmak için kontrol ettim
  • 01-07-2022, 11:50:49
    #6
    emiru9396 adlı üyeden alıntı: mesajı görüntüle
    hocam buraya atarken yanlış yazmışım ama sunucu da çalışan kod "$headers = getAuthorizationHeader();" şeklinde sunucumdaki kodların hiç birinde $$ durumu yok tekrar dan emin olmak için kontrol ettim
    PM ile anydesk atarsanız kontrolleri gerçekleştirebilirim. Hatayı bulduktan sonra birlikte fixleriz.
  • 04-07-2022, 02:24:45
    #7
    emiru9396 adlı üyeden alıntı: mesajı görüntüle
    Merhaba;

    Çoklu platformu olan bir uygulama için php tarafında token kontrolü yapıyoruz. Token olarak Bearer Token kullanıyoruz local de hiç bir sıkıntı olmadan kullanabiliyoruz sistem istediğimiz gibi çalışıyor ancak pleks panel yüklü olan sunucumuz da bu işlemi yapmak istediğimiz de token bilgisine kodta erişemiyoruz.

    Token bilgisini aşağıdaki kodlar ile çekiyoruz;
    function getAuthorizationHeader()
    {
        $headers = null;
        if (isset($_SERVER['Authorization'])) {
            $headers = trim($_SERVER["Authorization"]);
        } else if (isset($_SERVER['HTTP_AUTHORIZATION'])) { //Nginx or fast CGI
            $headers = trim($_SERVER["HTTP_AUTHORIZATION"]);
        } elseif (function_exists('apache_request_headers')) {
            $requestHeaders = apache_request_headers();
            // Server-side fix for bug in old Android versions (a nice side-effect of this fix means we don't care about capitalization for Authorization)
            $requestHeaders = array_combine(array_map('ucwords', array_keys($requestHeaders)), array_values($requestHeaders));
            //print_r($requestHeaders);
            if (isset($requestHeaders['Authorization'])) {
                $headers = trim($requestHeaders['Authorization']);
            }
        }
        return $headers;
    }
    function getBearerToken()
    {
        $$headers = getAuthorizationHeader();
        // HEADER: Get the access token from the header
        if (!empty($headers)) {
            if (preg_match('/Bearer\s(\S+)/', $headers, $matches)) {
                return $matches[1];
            }
        }
        return null;
    }
    internette de araştırma yaptığımız da bunun dışında bir yöntem bulamadık stackoverflow da da bu konu sorulmuş ve cevap olarak yukarıdaki kod verilmiş ancak biz local dışında çalıştıramadık sunucu taraflı php ini de veya apache server ayarlarından aktif edilmesi gereken bir ayarmı vardır acaba ? konu hakkında yardımlarınızı rica ederim.

    Teşekkürler, iyi çalışmalar.
    merhabalar, sorunuz cevabı aslında php içinde Barreer Token alamamanızın sebebi aşağı plesk panelin ilk olarak bunu firewall üzerinden handle etmesi durumu
    büyük ihtimalle sorununuz çözülecektir, .htaccess içinde kullanabilirsiniz.

    RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
  • 04-07-2022, 08:59:14
    #8
    andolis adlı üyeden alıntı: mesajı görüntüle
    merhabalar, sorunuz cevabı aslında php içinde Barreer Token alamamanızın sebebi aşağı plesk panelin ilk olarak bunu firewall üzerinden handle etmesi durumu
    büyük ihtimalle sorununuz çözülecektir, .htaccess içinde kullanabilirsiniz.

    RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    Öncelikle cevabınız için teşekkür ederim. Sistemde php router kullanıyorum yönlendirmelerin hepsini php ile gerçekleştiriyorum ve htaccess içerisinde tek bir satır var oda şu şekilde,
    RewriteRule ^([0-9a-zA-Z--_/=-üÜğĞçÇöÖşŞiİ]+)$ index.php?IstekUrl=$1 [L]
    Sizin vermiş olduğunuz kodu bu satırın üzerine eklersem sistemim çalışmıyor önceliği o aldığı için istekleri gerçekleştiremiyorum bu satırın altına eklersem de bir işe yaramıyor nasıl bir düzeltme ile bu işlemi gerçekleştirebilirim ?

    RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    RewriteRule ^([0-9a-zA-Z--_/=-üÜğĞçÇöÖşŞiİ]+)$ index.php?IstekUrl=$1 [L]
    Bu şekilde yaptığımda sistem çalışmıyor hiç bir isteğimi doğru bir şekilde yönlendiremiyorum.
  • 04-07-2022, 09:50:17
    #9
    @andolis internette şöyle bir kod buldum hocam,

    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
    .htaccess dosyasının en başına ekledim sizin verdiğiniz kodu da ekledim ama maalesef sonuç başarısız oldu header da gelen token bilgisine erişemiyorum.

    Apache ayarlarında aktif olan moduller şu şekilde;


    bu modullerin içinden açılması/kapanması gereken bir modül olabilir mi ?



    Sorun çözüşmüştür.

    @andolis hocamın verdiği kodun başına ekleme yaparak.

    .htaccess içeriği;
    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:AUTHORIZATION}]
    sonrasında sunucuyu yeniden başlatmam gerekti benim ek olarak