API de descanso de Magento 2: ¿Cómo administrar el ciclo de vida de autenticación de API en la aplicación de dispositivos móviles?

9

En la API web de Magento [2.2.4] cuando paso el nombre de usuario y la contraseña , genera un token para ese cliente específico (que solo es válido durante 1 hora; es configurable desde el administrador de Magento)

http://magento.host/index.php/rest/V1/integration/customer/[email protected]&password=test@123

que devuelve el token

Después de generar el token, cuando pasamos ese token en el encabezado.

Autorización :: Portador * Valor del token *

http://magento.host/index.php/rest/V1/customers/me

Que devuelve los detalles del cliente.

El caso anterior que expliqué funciona bien para webAPI en magento2 que probé en POSTMAN .

Ahora el caso es,

Cada hora de regeneración de token y después de ese inicio de sesión nuevamente cada hora no es lógico para la aplicación móvil.

Entonces, ¿cómo gestiona Magento los datos de inicio de sesión del usuario y la autenticación en la aplicación móvil, si se desarrolla API según los contratos de servicio?

  • ¿Cuánto tiempo debo permitir que existan mis tokens de acceso antes de que caduque en la aplicación móvil?
    • No quiero obligar a mis usuarios a volver a autenticarse cada hora en la aplicación móvil.
    • Cómo administrar adecuadamente el ciclo de vida del token API OAuth2 para la aplicación móvil.

Hacer cambios en el token de acceso Las horas de vida no serían una solución lógica, ya que la aplicación y la web deberían tener diferentes horas de vida de token

ingrese la descripción de la imagen aquí

Aditya Shah
fuente
¿Has intentado extender la vida útil del token desde la tienda-> configuración-> servicios-> OAuth-> Vida útil de la ficha del cliente (Horas) -?
Manthan Dave
No, verifíquelo haciendo un valor en blanco de Token Customer Lifetime (Hours), que deshabilitará la función si el valor está vacío. Entonces podría funcionar.
Aditya Shah
No lo hará porque cuando vaciemos el valor de Customer Token Lifetime, regenerará el token en cada solicitud y todos los datos no caducarán (todos los datos de la solicitud) y se almacenará en oauth_token
Aditya Shah
Si tiene acceso al código de una tienda que está conectando o puede escribir un módulo magento para su aplicación, una solución sería actualizar la fecha válida del token en cada solicitud cuando se usa el token del cliente, de forma similar a como se realiza la sesión. Luego, hasta que su aplicación haga alguna solicitud dentro del token de por vida, el cliente no se verá obligado a volver a autorizar.
Zefiryn
pero en función de qué bandera consideramos que se utiliza el token del cliente.
Aditya Shah

Respuestas:

3

Para verificar si hay un token de cliente válido, Magento verifica dos criterios

  1. Se revocó el token (eso ocurre cuando el usuario cierra sesión): se revoca guardado como 1 en la tabla oauth_token
  2. El token está realmente presente en la oauth_tokentabla

Magento ejecuta un cron para eliminar los tokens caducados (de por vida en la configuración de administrador) de la tabla ( vendor\magento\module-integration\Cron\CleanExpiredTokens.php)

Solución posible

  1. Aumentar la vida útil del token desde el administrador
  2. Anule el cron mencionado anteriormente para eliminar solo el token que se revocó, es decir, los tokens de clientes desconectados

Espero que esto responda a su pregunta

Vishwas Bhatnagar
fuente
¿Siento que estás hablando de los roles de usuario? como administrador ... también acepta la respuesta
Vishwas Bhatnagar
No, estoy hablando de la autenticación M2 utilizada en la aplicación móvil en el back-end, porque cada hora de regeneración de token y después de ese inicio de sesión nuevamente cada hora no es lógico para la aplicación móvil. Solo debe autenticarse una vez y cuando el usuario cambie la contraseña (actividad como esa)
Aditya Shah
Creo que he sugerido una solución para eso en mi respuesta anterior, estamos usando la misma solución y estamos trabajando perfectamente para nosotros
Vishwas Bhatnagar
1
¡¡Gracias hombre!! Busqué mucho pero no encontré ninguna solución excepto la tuya :)
Aditya Shah