Frage OpenID-Authentifizierung und API-Zugriff


OpenID-Authentifizierung ist inhärent browserbasiert. Wenn ich einem OpenID-Benutzer erlauben möchte, sich mit einer API zu authentifizieren, um sie in alternativen Clients zu verwenden, gibt es dafür eine bewährte Methode?

Wenn also beispielsweise ein Benutzer versucht hat, sich mit seiner OpenID in eine iPhone-App einzuloggen, wie würde das funktionieren? Die einzige Sache, die ich daran denken kann, ein API-Token irgendeiner Art für sie zu erzeugen und den Benutzer dazu zu bringen, es irgendwo manuell einzugeben. Dieser Ansatz ist nicht benutzerfreundlich.

So mögen Websites Basislager Arbeit, aber es scheint immer noch klobig zu mir.


16
2018-02-13 01:36


Ursprung


Antworten:


Das Problem, das Sie sehen, ist nicht eindeutig für OpenID. Jedes passwortlose Authentifizierungsschema kann dieses Problem haben. OAuth (http://oauth.net/) ist eine Lösung, die ein offener Standard ist, der auf vielen Websites schnell an Bedeutung gewinnt. Es ist völlig unabhängig davon, wie sich der Benutzer authentifiziert, also ihr OpenID-Provider nicht Sie müssen unterstützen oder sogar darauf achten, dass Ihre Site (der "Service Provider" in OAuth-Begriffen) OAuth verwendet. Ihr API-Client kann webbasiert oder sogar lokal sein!

Der Prozess wäre etwa so:

Rollen:

  • der Benutzer: jemand, der ein Konto bei Ihrer Website hat.
  • Dienstanbieter: Ihre Website, die über eine programmgesteuerte API verfügt, für die Zugriff auf bestimmte Anmeldeinformationen erforderlich ist.
  • Consumer: Der Client, ob Web- oder lokale Anwendung, der Zugriff auf die API des Service Providers benötigt.

Fließen:

  1. Der Benutzer ist beim Verbraucher. Er gibt an, dass er beim Dienstanbieter auf Daten zugreifen möchte.
  2. Der Benutzer wird entweder umgeleitet (wenn der Verbraucher eine Website ist) oder ein Browser wird geöffnet (wenn der Verbraucher eine lokale Anwendung ist), und der Benutzer sieht die Website des Diensteanbieters.
  3. Der Benutzer ist entweder bereits über einen dauerhaften Cookie beim Dienstanbieter angemeldet oder der Benutzer muss sich zuerst bei dem Dienstanbieter einloggen, wie es auch geschieht (in Ihrem Fall OpenID).
  4. Der Dienstanbieter fragt dann den Benutzer: "Verbraucher (einige Verbraucher) möchten Zugriff auf Ihre Daten (oder unsere API oder was auch immer). Möchten Sie dies zulassen? (Ja / Nein)
  5. Der Benutzer bestätigt, und das Browserfenster wird geschlossen oder zurück zur Benutzerseite geleitet.
  6. Über eine OAuth-Protokoll-Magie verfügt der Konsument nun über geheime Anmeldeinformationen, mit denen er auf Ihre API zugreifen und auf die von Ihnen autorisierten privaten Daten zugreifen kann.

Natürlich kann ich hier nicht die gesamte OAuth-Spezifikation angeben, aber Sie können hoffentlich von oben sehen, dass dies Ihr Problem lösen sollte. Es gibt OAuth-Bibliotheken, die das Hinzufügen von Unterstützung erleichtern.

Wenn Sie ASP.NET verwenden, schlage ich vor http://dotnetopenid.googlecode.com/ wie es vor kurzem OAuth-Unterstützung (v3.0 Beta 1) hinzugefügt.


16
2018-02-17 03:50



Weder OpenID noch OAuth definieren, wie sich ein Benutzer authentifiziert. Sie definieren, wie der Benutzer den Benutzeragenten an den Authentifizierungsanbieter weiterleitet, wie der Benutzeragent zurückgewiesen wird und wie der Benutzer die Identität überprüfen kann, mit der sich der Benutzer authentifiziert hat.

Die für die Authentifizierung verwendete Methode ist für beide Schemata out-of-band.

Es gibt Unterschiede zwischen OpenID und OAuth, beide erfordern jedoch, dass der Verbraucher HTTP-Weiterleitungen und Rückruf-URLs verwendet. Sie sind beide browserbasiert. Wenn Ihre App HTTP spricht, kann sie beides tun. Ein wichtiger Punkt ist jedoch, dass der Benutzer Anmeldeinformationen nur in eine vertrauenswürdige App eingibt.


4
2017-08-26 21:28



Was Sie wollen, ist mit OpenID nicht möglich. OpenID basiert auf der Prämisse, dass Sie (die iPhone App) nur über Ihre Benutzer wissen wollen, dass ihr OpenID-Provider ihnen vertraut. Sie authentifizieren sich nie für dich.

Gute OpenID-Anbieter sogar verhindern dass Sie den Authentifizierungsprozess vermitteln (da dies die Benutzer einem möglichen Angriff aussetzen würde - von Ihnen!): Sie verlangen, dass Benutzer sich direkt bei ihnen anmelden und den Login-durch-Verweis verweigern.


2
2018-02-13 01:52



Sieh dir das an verwandte Frage

Das Problem ist, dass die Openid-Spezifikation keine Standardbereitstellung für die Authentifizierung mit dem Provider hat, so dass der Provider wählen kann, dass die Authentifizierung über einen Telefonanruf oder was auch immer geschieht.

Hoffentlich mehr Anbieter umarme OAuth. Alternativ können Sie die Authentifizierung für einige der größeren Websites manuell codieren.


1
2018-02-13 01:41