Was ist der richtige Weg, um einen Benutzer zu authentifizieren?

7

Vor ein paar Jahren habe ich eine kleine und sehr unvollständige Komponente geschrieben, die Benutzer von außerhalb von Joomla! dh eine mobile Anwendung.

Gibt es eine richtige oder bevorzugte Möglichkeit, dies zu übergeben?

Nestor Ledon
quelle
Gibt es Sicherheitsüberlegungen? Speichert die andere Anwendung ihren Benutzernamen und ihr Passwort zur Authentifizierung oder möchten Sie ein System verwenden, das keine Kombinationen aus Benutzername und Passwort in der anderen App speichern muss?
David Fritsch
Ich denke, ich würde ein System bevorzugen, das die Anmeldeinformationen nicht clientseitig speichert. Die Anmeldung der Anwendungen würde eine Anforderung zur Authentifizierung auslösen und bei Erfolg ein Token erhalten.
Nestor Ledon

Antworten:

5

Basierend auf Ihrem Kommentar suchen Sie nach einem OAuth-Setup. Soweit ich weiß, sind in Joomla Oauth-Klassen im Kern integriert, aber diese Klassen sollen es Joomla ermöglichen, als Client zu fungieren (Ihre mobile App ist in Ihrem Fall ein Client). Sie bieten Ihnen nicht die Möglichkeit, als Server ausgeführt zu werden.

Ich habe dieses Paket erst kürzlich verwendet, um einen OAuth2-Server im Joomla Framework einzurichten: https://github.com/bshaffer/oauth2-server-php . Es hat sehr gut funktioniert. Dies wird definitiv einige Tage dauern, bis alles eingerichtet und betriebsbereit ist, aber Sie können dies definitiv in Joomla einrichten.

Es gibt verschiedene Methoden, um einen Benutzer in OAuth2 zu authentifizieren. Der übliche Ansatz besteht darin, dass der Client den Benutzer auf Ihre Site umleitet, um seine Anmeldeinformationen einzugeben. Anschließend leiten Sie den Benutzer mit einem Code, der vom Client in ein Zugriffstoken umgewandelt wird, zurück zum Client.

Da Sie anscheinend auch die mobile Anwendung steuern, ist dies nicht erforderlich. Sie vertrauen dem Client (ich hoffe), sodass sich der Benutzer einfach bei der Anwendung anmelden kann.

Sie würden dann die hier beschriebene Option "Ressourcenbesitzer / Kennwortanmeldeinformationen" verwenden: http://bshaffer.github.io/oauth2-server-php-docs/overview/grant-types/ . Dadurch sendet die mobile App nur den eingegebenen Benutzer / das eingegebene Kennwort an Ihre Joomla-Site. Anschließend sendet die Joomla-Site ein Token zur Validierung zurück. Das Token kann gespeichert und beim nächsten Mal verwendet werden, anstatt sich erneut anzumelden.

Auf diese Weise können Sie auf der Joomla-Website die Token ungültig machen, um mobile Benutzer zur erneuten Anmeldung zu zwingen.

David Fritsch
quelle
4

Sie können den folgenden Code verwenden:

JFactory::getApplication()->login($credentials);

wo:

$credentials = Array('username' => string, 'password' => string);
csbenjamin
quelle
Ich habe folgendes in der Joomla gefunden! Dokumentation, gibt es signifikante Unterschiede in diesem Ansatz? docs.joomla.org/…
Nestor Ledon
1
Die loginobige Methode verwendet die JAuthentication :: authenticate-Methode, die das Ereignis onAuthenticate auslöst. Diese Dokumentation enthält also Informationen zu einem Teil des Joomla-Anmeldezyklus. Der Zweck besteht darin, eine Möglichkeit zu bieten, mit dem Joomla-Anmeldezyklus zu interagieren und eine benutzerdefinierte Anmeldung durchzuführen. In diesem Zyklus haben wir auch die Ereignisse onUserAuthorisationFailure, onUserLogin und onUserAfterLogin
csbenjamin
3

Sie möchten so etwas wie OAuth / OAuth2 verwenden. Meine Idee hier ist nicht wahr OAuth, sondern basiert auf meinem Wissen über Joomla am einfachsten.

Überprüfen Sie den Benutzer per API-Aufruf an die Komponente in Joomla, um ein Token zu erstellen, das an seine IP angehängt ist, und leiten Sie ihn dann mit einer GET-Anforderung um, die dieses Token überprüft und die Sitzung für ihn erstellt. Das Token ist einfach zu sichern, da es sich bei der Authentifizierung des bereits authentifizierten Benutzers auf die IP stützt. Am besten stellen Sie sicher, dass es nur einmal verwendet werden kann. Für den API-Aufruf sollte es sich um eine SSL-verschlüsselte POST-Anforderung handeln, um die besten Ergebnisse zu erzielen.

Senden Sie daher eine POST-Anfrage an Ihre Komponente, die die IP-Adresse, den Benutzernamen und das Kennwort des Benutzers enthält. Wenn alles gültig ist, senden Sie ein Token zurück. Anschließend leiten Sie den Benutzer zu Ihrer Komponente weiter, die dieses Token enthält, um die Sitzung festzulegen. Ich weiß nicht, wie die Joomla-API verwendet werden kann, um eine Person anzumelden, aber ich bin sicher, dass es etwas dafür gibt.

Bearbeiten: Die Antwort von csbenjamin wurde anscheinend in die API zum Anmelden eingegeben.

Jordan Ramstad
quelle