Rest Oturum Yönetimi

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek

    Rest api' lerde oturum yönetimi nasıl oluyor ?

    Login için bir tane '/userlogin' diye birşey var. Veritabanında da api key adında bir parametre tutuyor, user login olduktan sonra api key bilgisini user' a json olarak gönderiyor.

    sonra herhangi bir get isteğinde bu api key' i HEADER' a ekleyip gönderiyor ve ordan veritabanındakiyle kontrol ediyor. eğer yoksa authorization vermiyor.

    şimdi normalde SESSION' lar ile yapıyorduk ama burda restful stateless. Client' a login olduktan sonra verdiği api key' i nerde saklayabilirim ?

    Bir de nasıl logout ettirebilirim -heralde o sakladığım api key' i kaldırmam yetecek. Ama nerede tutacağımı bilmiyorum. 

    Kullanıcı LOGOUT olana kadar bu api_key ile işlemlerini görücem, o yüzden client side da güvenli şekilde tutmam gerekiyor.

    Bu arada örnek olsun diye kod parçalarını koyuyorum : 

    -- Rest api LOGIN

    $app->post('/userlogin', function() use ($app) {
    	verifyRequiredParams(array('email', 'password'));
    	$email = $app->request->post('email');
    	$password = $app->request->post('password');
    	
    	$objUserRegLog = new UserRegistrationLogin;
    	$result = $objUserRegLog->getUserByEmailAndPassword($email, $password);
    	if (!$result) {
    		$response["error"] = true;
    		$response["message"] = "E-Posta ya da şifreniz hatalı!";
    	} else {
    		$response["error"] = false;
    		$response["id"] = $result["id"];
    		$response["email"] = $result["email"];
    		$response["api_key"] = $result["api_key"];
    	}
    	echoResponse(200, $response);
    });

    -- Sign In AJAX CALL :

    $.signin = function() {
    	var inputVals = $("#form_signin").serialize();
    	$.ajax({
    		url : "api/v1/userlogin",
    		data : inputVals,
    		dataType : "json",
    		type : "post",
    		success : function(response) {
    			if (response.error) {
    				$(".popup").trigger("click");
    				$(".modal-title").html(response.message_title);
    				$(".modal-body").html(response.message);
    			} else {
    				// RESPONSE DEĞERLERİ BURADA ?
    				window.location.href = "index.php";
    			}
    			console.log(response);
    		}
    	});
    	return false;
    }

    -- Bu da API KEY KONTROLÜ ve GET

    $app->get('/cases', 'authenticatePathologist', function() use ($app) {
    	$objCases = new Cases;
    	$result = $objCases->getAllCases();
    	if (!$result) {
    		$response["error"] = true;
    		$response["error_msg"] = "Bir sorun oluştu.";
    		$status_code = 404;
    	} else {
    		$response["error"] = false;
    		$response["cases"] = $result;
    		$status_code = 200;
    	}
    	echoResponse($status_code, $response);
    });
    function authenticatePathologist(\Slim\Route $route) {
        $headers = apache_request_headers();
        $response = array();
        $app = \Slim\Slim::getInstance();
    
        if (isset($headers['Authorization'])) {
            $db = new DbOperation();
            $api_key = $headers['Authorization'];
            if (!$db->isValidPathologist($api_key)) {
                $response["error"] = true;
                $response["message"] = "Access Denied. Invalid Api key";
                echoResponse(401, $response);
                $app->stop();
            }
        } else {
            $response["error"] = true;
            $response["message"] = "Api key is misssing";
            echoResponse(400, $response);
            $app->stop();
        }
    }
    ozgunlu tarafından 21/Nis/16 15:21 tarihinde düzenlenmiştir

    Hello, i am nothing. I come from Neverland.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Cosmic
    Cosmic's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    Localstorage de tutabilirsin. Çıkışta temizler tokenı db den silersin


    Bittik biz bittik
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ★★★★★
    Genki
    Genki's avatar
    Kayıt Tarihi: 24/Ağustos/2005
    Erkek

    fikir vermesi açısından : http://www.tahribat.com/forum/php-rest-api-guvenligi-nasil-saglanir--217724

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ozgunlu
    ozgunlu's avatar
    Banlanmış Üye
    Kayıt Tarihi: 11/Kasım/2011
    Erkek
    Cosmic bunu yazdı

    Localstorage de tutabilirsin. Çıkışta temizler tokenı db den silersin

    Evet bu işimi gördü hocam sağol.

    3-4 saattir okuyorum da kafam allak bullak oldu.

    Şu konuda birileri aydınlatsa fena olmayacak.

    OAuth, OAuth2, HttpBasicAuthentication, JWT gibi terimler var. Benim kullandığım hangisine giriyor, onu da bilmemekle beraber hangisi iyidir, hangisi kötüdür ?

    Sonuç olarak, HTTPS ile haberleşince user gidip api_key' ini başkalarıyla share etmezse bi sıkıntı çıkmayacak dimi ? 

    @Genki sağol hocam, bakıyorum ona da.

    ozgunlu tarafından 21/Nis/16 16:10 tarihinde düzenlenmiştir

    Hello, i am nothing. I come from Neverland.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YeniHarman
    YeniHarman's avatar
    Kayıt Tarihi: 17/Haziran/2012
    Erkek

    JWT kullanmayı öğrenmek lazım. Session yok, bu yüzden depolamaya da gerek yok (tmp klasörü içinde io işlemi yapılmayacak). Sadece secret-key'in güvenliğini sağlamak yeterli.


    Olaylara karışmayın!
Toplam Hit: 905 Toplam Mesaj: 4
rest api session management authentication