JWT Auth – Autenticación de token web JSON de WordPress

JWT Auth – Autenticación de token web JSON de WordPress

diciembre 22, 2020 General 0

¿Ya eres Miembro?

Para Descargar este Plugin



Descripción

La autenticación de token web JSON de WordPress le permite realizar la autenticación de API REST a través de token. Es simple, no complejo y fácil de usar. Este complemento probablemente sea la forma más conveniente de realizar la autenticación JWT en WordPress.

  • Soporte y pregunta: foro de soporte de WordPress
  • Informe del error del complemento: rastreador de problemas de GitHub
  • El canal de discordia también está disponible para una respuesta más rápida.

Habilitar el encabezado de autorización HTTP de PHP

Hosts compartidos

La mayoría de los hosts compartidos han desactivado Encabezado de autorización HTTP por defecto.

Para habilitar esta opción, deberá editar su .htaccess archivo agregando lo siguiente:

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

WPEngine

Para habilitar esta opción, deberá editar su .htaccess archivo agregando lo siguiente (ver este problema):

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

Configuración

Configura la clave secreta

El JWT necesita un llave secreta para firmar el token. Esta llave secreta debe ser único y nunca ser revelado.

Para agregar el llave secreta, edite su archivo wp-config.php y agregue una nueva constante llamada JWT_AUTH_SECRET_KEY.

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

Puedes usar una cadena desde aquí

Configurar el soporte de COR

Este complemento tiene la opción de activar la compatibilidad con COR.

Para habilitar el soporte CORs edite su archivo wp-config.php y agregue una nueva constante llamada JWT_AUTH_CORS_ENABLE

define('JWT_AUTH_CORS_ENABLE', true);

Espacio de nombres y puntos finales

Cuando se activa el complemento, se agrega un nuevo espacio de nombres.

/jwt-auth/v1

Además, dos nuevos ENVIAR los puntos finales se agregan a este espacio de nombres.

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

Solicitud / generación de token

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

Para generar un token, envíe una solicitud POST a este punto final. Con username y password como los parámetros.

Valida las credenciales del usuario y devuelve una respuesta de éxito que incluye un token si la autenticación es correcta o devuelve una respuesta de error si falla la autenticación.

Ejemplo de respuesta de éxito al intentar generar un token:

{
    "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"
    }
}

Ejemplo de respuesta de error al intentar generar token:

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

Una vez que obtenga el token, debe almacenarlo en algún lugar de su aplicación. Puede ser:
– utilizando Galleta

– o usando almacenamiento local

– o usando un contenedor como localForage o PouchDB
– o usando una base de datos local como SQLite o Hive
– o su elección basada en la aplicación que desarrolle 😉

Entonces deberías pasar este token como Autenticación de portador encabezado a cada llamada a la API. El formato del encabezado es:

Authorization: Bearer your-generated-token

y aquí hay un ejemplo:

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

los jwt-auth interceptará cada llamada al servidor y buscará el encabezado de autorización, si el encabezado de autorización está presente, intentará decodificar el token y establecerá el usuario de acuerdo con los datos almacenados en él.

Si el token es válido, el flujo de llamadas a la API continuará como siempre.

Endpoints de la lista blanca

Todas las llamadas al servidor (excepto la creación del token, alguna lista blanca predeterminada) serán interceptadas. Sin embargo, es posible que deba incluir en la lista blanca algunos puntos finales. Puedes usar jwt_auth_whitelist filtro para hacerlo. Simplemente agregue este filtro directamente (sin gancho). O puede agregarlo a plugins_loaded. Añadiendo este filtro dentro init (o posterior) no funcionará.

Si está agregando el filtro dentro del tema y la lista blanca no funciona, cree un pequeño complemento de 1 archivo y agregue su filtro allí.

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',
    );
} );

Puntos finales predeterminados en lista blanca

Incluimos en la lista blanca algunos puntos finales de forma predeterminada. Esto es para evitar errores relacionados con WordPress y WooCommerce. Estos son los puntos finales predeterminados en la lista blanca (sin seguimiento * carbonizarse):

// 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/',
);

Tu podrías querer eliminar o modificar el existente lista blanca predeterminada. Puedes usar jwt_auth_default_whitelist filtro para hacerlo. Simplemente agregue este filtro directamente (sin gancho). O puede agregarlo a plugins_loaded. Añadiendo este filtro dentro init (o posterior) no funcionará.

Si está agregando el filtro dentro del tema y no funciona, cree un pequeño complemento de 1 archivo y agregue su filtro allí. Debería solucionar el problema.

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

Validación de Token

Probablemente no necesito para validar el token usted mismo. El complemento lo maneja como se explicó anteriormente.

Pero si desea probar o validar el token manualmente, envíe un ENVIAR solicitud a este punto final (no olvide configurar su Autorización al portador encabezamiento):

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

Respuesta de token válida:

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

Errores

Si el token no es válido, se devolverá un error. A continuación, se muestran algunos ejemplos de errores:

Sin clave secreta

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

Sin encabezado HTTP_AUTHORIZATION

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

Problema malo

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

Firma inválida

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

Solicitud incorrecta

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

Usuario no encontrado

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

Contador caducado

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

Ganchos de filtro disponibles

Autenticación JWT es amigable para desarrolladores y tiene algunos filtros disponibles para anular la configuración predeterminada.

jwt_auth_cors_allow_headers

los jwt_auth_cors_allow_headers le permite modificar los encabezados disponibles cuando la compatibilidad con COR está habilitada.

Valor por defecto:

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

Ejemplo de uso:

/**
 * 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

los jwt_auth_iss te permite cambiar el iss valor antes de que la carga útil se codifique para ser un token.

Valor por defecto:

get_bloginfo( 'url' )

Ejemplo de uso:

/**
 * 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

los jwt_auth_not_before te permite cambiar el nbf valor antes de que la carga útil se codifique para ser un token.

Valor por defecto:

// Creation time.
time()

Ejemplo de uso:

/**
 * 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

los jwt_auth_expire te permite cambiar el valor Exp antes de que la carga útil se codifique para ser un token.

Valor por defecto:

time() + (DAY_IN_SECONDS * 7)

Ejemplo de uso:

/**
 * 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

los jwt_auth_alg le permite cambiar el algoritmo de firma admitido para su aplicación.

Valor por defecto:

'HS256'

Ejemplo de uso:

/**
 * 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

los jwt_auth_payload le permite modificar todos los datos de carga útil / token antes de ser codificados y firmados.

Valor por defecto:

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

Ejemplo de uso:

/**
 * 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

los jwt_auth_valid_credential_response le permite modificar la respuesta de credencial válida al generar un token.

Valor por defecto:

<?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,
    ),
);

Ejemplo de uso:

/**
 * 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

los jwt_auth_valid_token_response le permite modificar la respuesta del token válido al validar un token.

Valor por defecto:

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

Ejemplo de uso:

/**
 * 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éditos

PHP-JWT de firebase
Autenticación JWT para WP REST API

Instalación

Habilitar el encabezado de autorización HTTP de PHP

Hosts compartidos

La mayoría de los hosts compartidos han desactivado Encabezado de autorización HTTP por defecto.

Para habilitar esta opción, deberá editar su .htaccess archivo agregando lo siguiente:

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

WPEngine

Para habilitar esta opción, deberá editar su .htaccess archivo agregando lo siguiente (ver este problema):

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

Instalación a través del área administrativa de WordPress:

  • Desde el área administrativa de WordPress, vaya a Complementos -> Agregar nuevo
  • Buscar Autenticación JWT
  • Instalarlo
  • Configúrelo fácilmente (consulte “Configuración” a continuación)
  • y luego activarlo

Instalación mediante descarga manual:

  • Descargue el complemento de la página de complementos de WordPress
  • Sube a tu directorio wp-content
  • Configúrelo fácilmente (consulte “Configuración” a continuación)
  • Actívalo desde Complementos menú en el área de administración

Configuración

Configura la clave secreta

El JWT necesita un llave secreta para firmar el token. Debe ser único y nunca ser revelado.

Para agregar el llave secreta, edite su archivo wp-config.php y agregue una nueva constante llamada JWT_AUTH_SECRET_KEY.

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

Puedes usar una cadena desde aquí

Configurar el soporte de COR

Este complemento tiene la opción de habilitar la compatibilidad con COR.

Para habilitar el soporte CORs edite su archivo wp-config.php y agregue una nueva constante llamada JWT_AUTH_CORS_ENABLE

define('JWT_AUTH_CORS_ENABLE', true);

Finalmente, active el complemento dentro del panel del complemento.

Preguntas más frecuentes

Ahora casi todas las rutas REST están interceptadas. ¿Cómo excluir algunas rutas / puntos finales?

Hay jwt_auth_whitelist que puede utilizar para incluir en la lista blanca puntos finales específicos. Para obtener más información, lea Endpoints de la lista blanca en la pestaña Descripción.

¿Tiene un repositorio de GitHub para este complemento?

Puedes visitar el repositorio de GitHub aquí

Utilizo este complemento en mis proyectos. Quiero que este complemento se mantenga vivo y se mantenga, ¿cómo puedo ayudar?

Puede ayudar a que este complemento se mantenga vivo y se mantenga dando 5 estrellas Calificación / reseña o donarme a través de:
– PayPal
– Patreon

Reseñas

Excelente

Dovich
9 de diciembre de 2020
Gracias por esta bifurcación del complemento antiguo que no se admitió durante mucho tiempo. Asombroso.

Bueno

ness
1 de diciembre de 2020
Bueno

Excelente. Simplemente funciona.

jeswd
15 de noviembre de 2020
No hay problemas con este complemento. Simplemente funciona.

Complemento asombroso

mohamedfaragallah
4 de octubre de 2020
Gracias

Complemento Fantástico

danilsonveloso
25 de septiembre de 2020
Trabalho excelente. Funciona muito bem.

Gran complemento

pesseba
28 de agosto de 2020
Una evolución del complemento anterior con mejores funciones.

Leer las 15 reseñas

Colaboradores y desarrolladores

“JWT Auth – WordPress JSON Web Token Authentication” es un software de código abierto. Las siguientes personas han contribuido a este complemento.

Colaboradores

  • Bagus

“JWT Auth – WordPress JSON Web Token Authentication” ha sido traducido a 3 configuraciones regionales. Gracias a los traductores por sus contribuciones.

Traduzca “JWT Auth – WordPress JSON Web Token Authentication” a su idioma.

Interesado en el desarrollo?

Explore el código, consulte el repositorio de SVN o suscríbase al registro de desarrollo mediante RSS.

Registro de cambios

1.4.2

  • Corrección de error: agregar permission_callback argumento ya que se requiere en WP 5.5

1.4.1

  • Corrección de error: el anterior /wp-json/wp/v2/* la lista blanca no funcionó. Debería ser /wp-json/wp/v2/ (sin el carácter estrella).

1.4.0

  • Lista blanca /wp-json/wp/v2/* por defecto. Esto evitará que el complemento rompa la administración predeterminada de WordPress (gutenberg, etc.).
  • Corrección de errores: solucione el problema con la instalación del subdirectorio de WordPress. Ver problema.

1.3.0

  • Cambio de filtro: jwt_auth_valid_token_response solo debería filtrar la matriz $ response en lugar de la totalidad WP_REST_Response. Compruebe si utiliza este filtro 🙂
  • README actualización sobre jwt_auth_whitelist uso del filtro. Ese filtro debe agregarse directamente (sin gancho) O adentro plugins_loaded. Agregándolo a init (o después de eso) no funcionará.

1.2.0

  • Corrección de errores críticos: El administrador de WooCommerce se rompe. Con este cambio, el administrador de WooCommerce debería ser bueno.
  • Nuevo filtro: incluimos en la lista blanca algunos puntos finales de forma predeterminada para admitir complementos comunes como WooCommerce. Estos extremos predeterminados incluidos en la lista blanca se pueden cambiar a través de jwt_auth_default_whitelist filtrar.

1.1.0

  • Apoya a WooCommerce ignorando /wp-json/wc/ y /wp-json/wc-auth/ espacio de nombres. Puedes usar jwt_auth_whitelist filtrar si desea incluir en la lista blanca otros puntos finales. Ver Endpoints de la lista blanca sección en la pestaña de descripción.

1.0.0

  • Cambio de filtro: Cambiar nombre jwt_auth_token_payload filtrar a jwt_auth_payload
  • Cambio de filtro: Cambiar nombre jwt_auth_token_response filtrar a jwt_auth_valid_credential_response
  • Corrección de errores críticos: La autenticación solo restringió los puntos finales wp-json / jwt-auth / v1 / *. Por tanto, los puntos finales en otro espacio de nombres no estaban restringidos. Con este cambio, ahora se restringen otros puntos finales. Si necesita incluir en la lista blanca algunos puntos finales, lea acerca de Endpoints de la lista blanca sección en la pestaña de descripción.
  • Nuevo filtro: jwt_auth_valid_token_response
  • Nuevo filtro: haga posible incluir en la lista blanca puntos finales específicos a través de jwt_auth_whitelist filtrar.
  • Nuevo filtro: haga posible cambiar el emisor del token proporcionando jwt_auth_iss filtrar.
  • Nuevo filtro: haga posible cambiar el algoritmo admitido proporcionando jwt_auth_alg filtrar.
  • Nuevo filtro: haga posible cambiar la respuesta de token válida proporcionando jwt_auth_valid_token_response filtrar.
  • Agregue soporte para sitio con enlace permanente deshabilitado.

0.1.3

  • Añadir jwt_auth_do_custom_auth filtro para que el desarrollador pueda usar la autenticación personalizada como la autenticación OTP o cualquier otra.

0.1.2

  • Versión de trabajo.

¿Ya eres Miembro?

Para Descargar este Plugin



Por favor Comparte y Síguenos:
RSS
Follow by Email
Facebook
Twitter

Deja un comentario