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

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
9 de diciembre de 2020
Bueno
1 de diciembre de 2020
Excelente. Simplemente funciona.
15 de noviembre de 2020
Complemento asombroso
4 de octubre de 2020
Complemento Fantástico
25 de septiembre de 2020
Gran complemento
28 de agosto de 2020
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 totalidadWP_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 adentroplugins_loaded
. Agregándolo ainit
(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 usarjwt_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 ajwt_auth_payload
-
Cambio de filtro: Cambiar nombre
jwt_auth_token_response
filtrar ajwt_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.