İçeriğe geç →

PHP JSON WEB TOKEN (JWT) OLUŞTURMA

PHP JSON WEB TOKEN

Öncelikle JWT ‘nin ne olup olmadığına aşşağıdaki linkten bakabilirsiniz.Biz bu yazıda php implementasyonunu gerçekleştireceğiz.

http://devnot.com/2017/json-web-token-jwt-standardi/

STRUCTURE

———- generatetoken.php

———- validtoken.php

Kütüphane olarak  firebase’in php jwt kütüphanesini kullanıyoruz.

https://github.com/firebase/php-jwt

HTTP Request  için postman kullanıyoruz. Token’ı oluştururken bazı parametler vermemiz gerekmekte.

 

iss: issuer kısacası tokenin oluşturulmasıyla ilintili servis.

aud: audience tokenin kullanılacağı servis.

exp: tokenin son valid olduğu tarih.

nbf: tokenin aktif olmaya başlayacağı tarih.

iat: tokenin oluşturulduğu tarih.

Tarihler unix timestamp. Kütüphane seçerken bir diğer dikkat edilecek husus ise JWT ile ilgili önemli bir güvenlik açığını içerip içermediği.

Generate.php

<pre><?php
require __DIR__ . '/vendor/autoload.php';
use \Firebase\JWT\JWT;

date_default_timezone_set('Europe/Istanbul');

if (!empty($_POST)) {
    $key = "Örnek Key"; // bu bizim oluşturacağımız bi nevi şifremiz
    $iss = "http://localhost:80";
    $aud = "http://localhost:80";
    $iat = 1356999524;
    $nbf = 1357000000;

    $token = [
        'iss' => $iss,
        'aud' => $aud,
        'iat' => $iat,
        'nbf' => $nbf,
        'data' => [
            'id' => 1,
            'firstname' => 'test',
            'email' => 'test'
        ]
    ];

    http_response_code(200);

    $jwt = JWT::encode($token,$key);
    echo $jwt;
}</pre>

Postman Aracılığıyla adrese post yapıyoruz.

 

Validtoken.php

<pre><?php

require __DIR__ . '/vendor/autoload.php';
use \Firebase\JWT\JWT;
// required headers
header("Access-Control-Allow-Origin: http://localhost/test2.php");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
$jwt=$_POST["jwt"];
$key = "Örnek Key";

if ($jwt) {
    // if decode succeed, show user details
    try {
        // decode jwt
        $decoded = JWT::decode($jwt, $key, array('HS256'));

        // set response code
        http_response_code(200);

        // show user details
        echo json_encode(array(
            "message" => "Erişim Sağlandı.",
            "data" => $decoded->data
        ));

    }// if decode fails, it means jwt is invalid
    catch (Exception $e) {

        // set response code
        http_response_code(401);

        // tell the user access denied  & show error message
        echo json_encode(array(
            "message" => "Erişim Engellendi.",
            "error" => $e->getMessage()
        ));
    }
}</pre>

Tokenin geçerli olup olmadığını anlamak için postman ile post işlemi gerçekleştiriyoruz.

 

 

 

 

 

 

 

 

 

 

Kategori: php

Yorumlar

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir