Magento 2 Rest API - Wie verwalte ich den API-Authentifizierungslebenszyklus auf mobilen Geräten?

9

Wenn ich in der Magento [2.2.4] Web-API Benutzername und Passwort übergebe , wird ein Token für diesen bestimmten Kunden generiert (das nur 1 Stunde gültig ist - es kann vom Administrator aus konfiguriert werden).

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

welches Token zurückgibt.

Nach dem Generieren des Tokens, wenn wir dieses Token im Header übergeben.

Autorisierung :: Inhaber * Token-Wert *

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

Welches gibt Kundendetails zurück.

Der obige Fall, den ich erklärt habe, funktioniert gut für webAPI in magento2, das ich in POSTMAN getestet habe .

Nun ist der Fall,

Die stündliche Regeneration des Tokens und die anschließende erneute Anmeldung jede Stunde ist für Mobile Application nicht logisch.

Dann, wie Magentop Benutzeranmeldedaten und Authentifizierung in der mobilen Anwendung verwaltet, wenn es sich um eine API gemäß Serviceverträgen handelt

  • Wie lange sollte ich erlaube meinem Zugriffstoken zu existieren , bevor es in Mobile Application abläuft?
    • Ich möchte meine Benutzer nicht zwingen, sich jede Stunde in Mobile Application erneut zu authentifizieren .
    • So verwalten Sie den Lebenszyklus Ihres OAuth2- API-Tokens für mobile Anwendungen ordnungsgemäß .

Änderungen an den Stunden der Zugriffstoken-Lebensdauer vorzunehmen, wäre keine logische Lösung, da Anwendung und Web unterschiedliche Lebensdauer-Stunden für Token haben sollten

Geben Sie hier die Bildbeschreibung ein

Aditya Shah
quelle
Haben Sie versucht, die Token-Lebensdauer von store-> configuration-> services-> OAuth-> Customer Token Lifetime (Hours) - zu verlängern?
Manthan Dave
Nein, überprüfen Sie dies, indem Sie einen leeren Wert für die Lebensdauer des Kundentokens (Stunden) festlegen. Dadurch wird die Funktion deaktiviert, wenn der Wert leer ist. Könnte also funktionieren.
Aditya Shah
Wenn wir den Wert von Customer Token Lifetime leeren, wird jede Anforderung neu generiert
Aditya Shah
Wenn Sie Zugriff auf den Code eines Geschäfts haben, mit dem Sie eine Verbindung herstellen, oder ein Magento-Modul für Ihre App schreiben können, besteht eine Lösung darin, das Gültigkeitsdatum des Tokens bei jeder Anforderung zu aktualisieren, wenn das Kundentoken verwendet wird, ähnlich wie bei der Sitzung. Solange Ihre App keine Anfragen innerhalb der Token-Lebensdauer ausführt, muss der Kunde keine erneute Autorisierung vornehmen.
Zefiryn
Basierend auf dem Flag wird jedoch davon ausgegangen, dass das Kunden-Token verwendet wird.
Aditya Shah

Antworten:

3

Um nach einem gültigen Kunden-Token zu suchen, überprüft Magento zwei Kriterien

  1. Wird das Token widerrufen (dies geschieht, wenn sich der Benutzer abmeldet): Das gesperrte Token wird in der Tabelle oauth_token als 1 gespeichert
  2. Token ist tatsächlich in der oauth_tokenTabelle vorhanden

Magento führt einen Cron aus, um die abgelaufenen Token (gemäß Lebensdauer in der Administratoreinstellung) aus der Tabelle zu entfernen ( vendor\magento\module-integration\Cron\CleanExpiredTokens.php)

Mögliche Lösung

  1. Erhöhen Sie die Token-Lebensdauer von admin
  2. Überschreiben Sie den oben genannten Cron, um nur das widerrufene Token zu entfernen, dh die abgemeldeten Kunden-Token

Hoffe das beantwortet deine Frage

Vishwas Bhatnagar
quelle
Ich glaube, Sie sprechen über die Benutzerrollen? wie admin ... auch bitte akzeptieren Sie die Antwort
Vishwas Bhatnagar
Nein, ich spreche von der M2-Authentifizierung, die in mobilen Anwendungen im Back-End verwendet wird, da jede stündliche Regeneration des Tokens und danach jede erneute Anmeldung für mobile Anwendungen nicht logisch ist. Es sollte nur einmal authentifiziert werden und wenn der Benutzer das Passwort ändert (Aktivität wie diese)
Aditya Shah
Ich glaube, ich habe eine Lösung dafür vorgeschlagen. In meiner obigen Antwort verwenden wir dieselbe Lösung und arbeiten einwandfrei für uns
Vishwas Bhatnagar,
1
Danke, Mann!! Ich habe viel gesucht, aber keine Lösung gefunden außer deiner :)
Aditya Shah