L’authentification par jeton Web WordPress JSON vous permet d’effectuer une authentification API REST à l’aide d’un jeton. C’est simple, pas complexe et facile à utiliser. Ce plugin est probablement le moyen le plus pratique de faire l’authentification JWT dans WordPress.

Activer l’en-tête d’autorisation HTTP PHP

Hôtes partagés

La plupart des hôtes partagés l’ont désactivé En-tête d’autorisation HTTP Par défaut.

Pour activer cette option, vous devrez modifier la vôtre .htaccess Fichier en ajoutant ce qui suit:

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

WPEngine

Pour activer cette option, vous devrez modifier la vôtre .htaccess Fichier en ajoutant ce qui suit (voir ce problème):

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

construction

Configurer la clé secrète

Le JWT a besoin d’un clef secrète signez le jeton. Celles-ci clef secrète doit être unique et ne doit jamais être révélé.

Ajout du clef secrèteModifiez votre fichier wp-config.php et ajoutez une nouvelle constante nommée JWT_AUTH_SECRET_KEY.

define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key');

Vous pouvez utiliser une chaîne de caractères Ici

Configurer la prise en charge des COR

Ce plugin peut être activé COR Support.

Pour activer le support CORs, éditez votre fichier wp-config.php et ajoutez une nouvelle constante avec le nom JWT_AUTH_CORS_ENABLE

define('JWT_AUTH_CORS_ENABLE', true);

Espace de noms et points de terminaison

Lorsque le plugin est activé, un nouvel espace de noms est ajouté.

/jwt-auth/v1

Aussi deux nouveaux PUBLIER Les points de terminaison sont ajoutés à cet espace de noms.

/wp-json/jwt-auth/v1/token
/wp-json/jwt-auth/v1/token/validate

Demander / générer un jeton

/wp-json/jwt-auth/v1/token

Envoyez une requête POST à ​​ce point de terminaison pour générer un jeton. Avec username et password que les paramètres.

Il vérifie les informations d’identification de l’utilisateur et renvoie une réponse de succès comprenant un jeton si l’authentification est correcte ou renvoie une réponse d’erreur si l’authentification échoue.

Exemple de réponse réussie lors de la tentative de génération d’un jeton:

{
    "success": true,
    "statusCode": 200,
    "code": "jwt_auth_valid_credential",
    "message": "Credential is valid",
    "data": {
        "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvcG9pbnRzLmNvdXZlZS5jby5pZCIsImlhdCI6MTU4ODQ5OTE0OSwibmJmIjoxNTg4NDk5MTQ5LCJleHAiOjE1ODkxMDM5NDksImRhdGEiOnsidXNlciI6eyJpZCI6MX19fQ.w3pf5PslhviHohmiGF-JlPZV00XWE9c2MfvBK7Su9Fw",
        "id": 1,
        "email": "[email protected]",
        "nicename": "contactjavas",
        "firstName": "Bagus Javas",
        "lastName": "Heruyanto",
        "displayName": "contactjavas"
    }
}

Exemple de réponse d’erreur lors de la tentative de génération d’un jeton:

{
    "success": false,
    "statusCode": 403,
    "code": "invalid_username",
    "message": "Unknown username. Check again or try your email address.",
    "data": []
}

Une fois que vous avez obtenu le jeton, vous devrez l’enregistrer quelque part dans votre application. C’est possible:
– Avec biscuit
– ou avec mémoire locale
– ou avec un emballage comme localForage ou alors PouchDB
– ou avec une base de données locale comme SQLite ou Ruche
– ou votre choix en fonction de l’application que vous développez 😉

Ensuite, vous devez transmettre ce jeton comme Authentification du propriétaire En-tête pour chaque appel d’API. Le format de l’en-tête est:

Authorization: Bearer your-generated-token

et voici un exemple:

"Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvcG9pbnRzLmNvdXZlZS5jby5pZCIsImlhdCI6MTU4ODQ5OTE0OSwibmJmIjoxNTg4NDk5MTQ5LCJleHAiOjE1ODkxMDM5NDksImRhdGEiOnsidXNlciI6eyJpZCI6MX19fQ.w3pf5PslhviHohmiGF-JlPZV00XWE9c2MfvBK7Su9Fw";

le jwt-auth intercepte chaque appel au serveur et recherche l’en-tête d’autorisation. Si l’en-tête d’autorisation est présent, il essaie de décoder le jeton et définit l’utilisateur en fonction des données qui y sont stockées.

Si le jeton est valide, le flux d’appels d’API se poursuit comme toujours.

Liste blanche des points de terminaison

Chaque appel au serveur (à l’exception de la création de jetons dans une liste blanche standard) est intercepté. Cependant, vous devrez peut-être ajouter certains points de terminaison à la liste blanche. Vous pouvez utiliser jwt_auth_whitelist Filtres pour le faire. Veuillez simplement ajouter ce filtre directement (pas de coche). Ou vous pouvez l’ajouter plugins_loaded. Ajout de ce filtre à l’intérieur init (ou version ultérieure) ne fonctionnera pas.

Si vous ajoutez le filtre dans le sujet et que la liste blanche ne fonctionne pas, veuillez créer un petit plugin à 1 fichier et y ajouter votre filtre.

add_filter( 'jwt_auth_whitelist', function ( $endpoints ) {
    return array(
        '/wp-json/custom/v1/webhook/*',
        '/wp-json/custom/v1/otp/*',
        '/wp-json/custom/v1/account/check',
        '/wp-json/custom/v1/register',
    );
} );

Points de terminaison standard sur liste blanche

Par défaut, certains points de terminaison sont ajoutés à la liste blanche. Ceci afin d’éviter les erreurs liées à WordPress et WooCommerce. Ce sont les endpoints standard sur la liste blanche (sans suivi) * * carboniser):

// Whitelist some endpoints by default (without trailing * char).
$default_whitelist = array(
    // WooCommerce namespace.
    $rest_api_slug . '/wc/',
    $rest_api_slug . '/wc-auth/',
    $rest_api_slug . '/wc-analytics/',

    // WordPress namespace.
    $rest_api_slug . '/wp/v2/',
);

Peut-être que tu veux supprimer ou changer les existants Liste blanche standard. Vous pouvez utiliser jwt_auth_default_whitelist Filtres pour le faire. Veuillez simplement ajouter ce filtre directement (pas de coche). Ou vous pouvez l’ajouter plugins_loaded. Ajout de ce filtre à l’intérieur init (ou version ultérieure) ne fonctionnera pas.

Si vous ajoutez le filtre dans le thème et que cela ne fonctionne pas, créez un petit plugin à 1 fichier et ajoutez-y votre filtre. Cela devrait résoudre le problème.

add_filter( 'jwt_auth_default_whitelist', function ( $default_whitelist ) {
    // Modify the $default_whitelist here.
    return $default_whitelist;
} );

Valider le jeton

Vous probablement ne ont pas besoin pour valider le jeton lui-même. Le plugin fait cela pour vous comme décrit ci-dessus.

Cependant, si vous souhaitez tester ou valider manuellement le jeton, envoyez un PUBLIER Demande à ce point de terminaison (n’oubliez pas de définir le vôtre Autorisation du propriétaire Entête):

/wp-json/jwt-auth/v1/token/validate

Réponse de jeton valide:

{
    "success": true,
    "statusCode": 200,
    "code": "jwt_auth_valid_token",
    "message": "Token is valid",
    "data": []
}

Erreur

Si le jeton n’est pas valide, une erreur est renvoyée. Voici quelques exemples d’erreurs:

Pas de clé secrète

{
    "success": false,
    "statusCode": 403,
    "code": "jwt_auth_bad_config",
    "message": "JWT is not configurated properly.",
    "data": []
}

Aucun en-tête HTTP_AUTHORIZATION

{
    "success": false,
    "statusCode": 403,
    "code": "jwt_auth_no_auth_header",
    "message": "Authorization header not found.",
    "data": []
}

Mauvais manger

{
    "success": false,
    "statusCode": 403,
    "code": "jwt_auth_bad_iss",
    "message": "The iss do not match with this server.",
    "data": []
}

Signature non valide

{
    "success": false,
    "statusCode": 403,
    "code": "jwt_auth_invalid_token",
    "message": "Signature verification failed",
    "data": []
}

Mauvaise Demande

{
    "success": false,
    "statusCode": 403,
    "code": "jwt_auth_bad_request",
    "message": "User ID not found in the token.",
    "data": []
}

utilisateur non trouvé

{
    "success": false,
    "statusCode": 403,
    "code": "jwt_auth_user_not_found",
    "message": "User doesn't exist",
    "data": []
}

Jeton expiré

{
    "success": false,
    "statusCode": 403,
    "code": "jwt_auth_invalid_token",
    "message": "Expired token",
    "data": []
}

Crochets de filtre disponibles

Auth JWT est convivial pour les développeurs et dispose de quelques filtres pour remplacer les paramètres par défaut.

jwt_auth_cors_allow_headers

le jwt_auth_cors_allow_headers Cette option vous permet de modifier les en-têtes disponibles lorsque la prise en charge COR est activée.

Valeur par défaut:

'X-Requested-With, Content-Type, Accept, Origin, Authorization'

Exemple d’application:

/**
 * Change the allowed CORS headers.
 *
 * @param string $headers The allowed headers.
 * @return string The allowed headers.
 */
add_filter(
    'jwt_auth_cors_allow_headers',
    function ( $headers ) {
        // Modify the headers here.
        return $headers;
    }
);

jwt_auth_iss

le jwt_auth_iss vous permet de changer cela manger Valeur avant que les données utilisateur ne soient encodées sous forme de jeton.

Valeur par défaut:

get_bloginfo( 'url' )

Exemple d’application:

/**
 * Change the token issuer.
 *
 * @param string $iss The token issuer.
 * @return string The token issuer.
 */
add_filter(
    'jwt_auth_iss',
    function ( $iss ) {
        // Modify the "iss" here.
        return $iss;
    }
);

jwt_auth_not_before

le jwt_auth_not_before vous permet de changer cela nbf Valeur avant que les données utilisateur ne soient encodées sous forme de jeton.

Valeur par défaut:

// Creation time.
time()

Exemple d’application:

/**
 * Change the token's nbf value.
 *
 * @param int $not_before The default "nbf" value in timestamp.
 * @param int $issued_at The "iat" value in timestamp.
 *
 * @return int The "nbf" value.
 */
add_filter(
    'jwt_auth_not_before',
    function ( $not_before, $issued_at ) {
        // Modify the "not_before" here.
        return $not_before;
    },
    10,
    2
);

jwt_auth_expire

le jwt_auth_expire Cette option vous permet de changer la valeur exp avant que les données utilisateur ne soient encodées sous forme de jeton.

Valeur par défaut:

time() + (DAY_IN_SECONDS * 7)

Exemple d’application:

/**
 * Change the token's expire value.
 *
 * @param int $expire The default "exp" value in timestamp.
 * @param int $issued_at The "iat" value in timestamp.
 *
 * @return int The "nbf" value.
 */
add_filter(
    'jwt_auth_expire',
    function ( $expire, $issued_at ) {
        // Modify the "expire" here.
        return $expire;
    },
    10,
    2
);

jwt_auth_alg

le jwt_auth_alg Cette option vous permet de modifier la signature prise en charge algorithme pour votre application.

Valeur par défaut:

'HS256'

Exemple d’application:

/**
 * Change the token's signing algorithm.
 *
 * @param string $alg The default supported signing algorithm.
 * @return string The supported signing algorithm.
 */
add_filter(
    'jwt_auth_alg',
    function ( $alg ) {
        // Change the signing algorithm here.
        return $alg;
    }
);

jwt_auth_payload

le jwt_auth_payload Cette option vous permet de modifier toutes les données utiles / jetons avant qu’elles ne soient encodées et signées.

Valeur par défaut:

<?php
$token = array(
    'iss' => get_bloginfo('url'),
    'iat' => $issued_at,
    'nbf' => $not_before,
    'exp' => $expire,
    'data' => array(
        'user' => array(
            'id' => $user->ID,
        )
    )
);

Exemple d’application:

/**
 * Modify the payload/ token's data before being encoded & signed.
 *
 * @param array $payload The default payload
 * @param WP_User $user The authenticated user.
 * .
 * @return array The payload/ token's data.
 */
add_filter(
    'jwt_auth_payload',
    function ( $payload, $user ) {
        // Modify the payload here.
        return $payload;
    },
    10,
    2
);

jwt_auth_valid_credential_response

le jwt_auth_valid_credential_response Cette option vous permet de modifier la réponse des informations d’identification valides lors de la génération d’un jeton.

Valeur par défaut:

<?php
$response = array(
    'success'    => true,
    'statusCode' => 200,
    'code'       => 'jwt_auth_valid_credential',
    'message'    => __( 'Credential is valid', 'jwt-auth' ),
    'data'       => array(
        'token'       => $token,
        'id'          => $user->ID,
        'email'       => $user->user_email,
        'nicename'    => $user->user_nicename,
        'firstName'   => $user->first_name,
        'lastName'    => $user->last_name,
        'displayName' => $user->display_name,
    ),
);

Exemple d’application:

/**
 * Modify the response of valid credential.
 *
 * @param array $response The default valid credential response.
 * @param WP_User $user The authenticated user.
 * .
 * @return array The valid credential response.
 */
add_filter(
    'jwt_auth_valid_credential_response',
    function ( $response, $user ) {
        // Modify the response here.
        return $response;
    },
    10,
    2
);

jwt_auth_valid_token_response

le jwt_auth_valid_token_response Cette option vous permet de modifier la réponse de jeton valide lors de la validation d’un jeton.

Valeur par défaut:

<?php
$response = array(
    'success'    => true,
    'statusCode' => 200,
    'code'       => 'jwt_auth_valid_token',
    'message'    => __( 'Token is valid', 'jwt-auth' ),
    'data'       => array(),
);

Exemple d’application:

/**
 * Modify the response of valid token.
 *
 * @param array $response The default valid token response.
 * @param WP_User $user The authenticated user.
 * @param string $token The raw token.
 * @param array $payload The token data.
 * .
 * @return array The valid token response.
 */
add_filter(
    'jwt_auth_valid_token_response',
    function ( $response, $user, $token, $payload ) {
        // Modify the response here.
        return $response;
    },
    10,
    4
);

Crédits

PHP-JWT de Firebase
Authentification JWT pour l’API WP REST



Source link

Recent Posts