2016-11-23 7 views
3

Ich habe kein spezifisches technisches Problem, aber ein allgemeines Problem, die Architektur für die Verwendung von Auth0 für Authentifizierung zu verstehen und dann das zurückgegebene Profil zu verwenden, um auf eine Rails API zuzugreifen.Auth0 mit Rails API

Ich benutze Auth0.Lock in React Native und kann mich erfolgreich anmelden und bei meiner React Native App anmelden und das zurückgegebene Profil und Token speichern.

Auf der Rails-Seite muss ich eine API erstellen und Knock (https://github.com/nsarno/knock) gemäß den Anweisungen zur Implementierung der JWT-Authentifizierung einrichten.

Was ich nicht verstehe, ist die Verbindung zwischen meinem Benutzermodell in Rails und meiner Datenbank in Auth0. Weder in der Auth0-Dokumentation noch in der Knock-Dokumentation wird deutlich, wie diese Verknüpfung geschieht.

Dank Craig

Antwort

0

aus dem folgenden soll möglich sein, in die vorliegenden Unterlagen suchen.

Durch die Definition der appropriate scope können Sie Auth0 anweisen, bestimmte Informationen - Ansprüche - in das ID-Token aufzunehmen, das als Ergebnis einer erfolgreichen Authentifizierung zurückgegeben wurde.

Wenn alle Benutzerprofilinformationen im Token selbst enthalten sind, können Sie Knock so verwenden, dass die Benutzermodellinstanz aus den JWT-Nutzdaten selbst erstellt wird, ohne dass zusätzliche Stores abgefragt werden müssen.


Standardmäßig nimmt Klopfen die Nutzlast als Subjekt (sub) claim der Entität des ID enthält, und fordert das Modell zu finden. Wenn Sie dieses Verhalten ändern möchten, implementieren Sie in Ihrem Entitätsmodell eine Klassenmethode from_token_payload, die die Nutzlast in Argument übernimmt.

class User < ActiveRecord::Base 
    def self.from_token_payload payload 
    # Returns a valid user, `nil` or raise 
    end 
end 

(Quelle: Knock Customization)


Mit diesem Ansatz der Token selbst ausreichend ist, und es gibt keine weitere Interaktion zwischen den Schienen und Auth0 API. Das Benutzermodell wird aus dem Token erstellt und auf die Auth0-Datenbank wird von der Rails-API nicht direkt zugegriffen. Es verwendet lediglich die dort gespeicherten Informationen und Oberflächen auf dem Token.

Es sollte möglich sein, mit anderen Ansätzen mit direkterer Interaktion mit der Auth0-Datenbank zu gehen. Wenn Sie diese Route hinunter gehen müssen, sollten Sie in die Management API (user related endpoints) als eine Möglichkeit für Sie mit der Auth0-Datenbank aus Ihrer eigenen Anwendung interagieren.

+0

Vielen Dank, das hat mir ein paar Dinge gegeben, um es zu sehen. Ich werde dich wissen lassen, wie ich gehe. – Klinsey

1

Ich habe zwei Beispielprojekte erstellt, eine rails API und eine front-end app, die auth0 Integration in Schienen veranschaulichen. Ich gehe davon aus, dass Umfang Ansprüche in den Token vorhanden sind, um auf einer sehr grundlegenden Ebene zu demonstrieren, wie Autorisierung in einem solchen Szenario funktionieren würde.

Das Frontend verwendet AngularJS, aber das ist meistens irrelevant, da die Logik sehr einfach ist und in jedem Framework einfach neu geschrieben werden kann.

Wie Joao-Angelo andeutete, die Verwendung von Token macht es meistens unmöglich, ein Benutzermodell zu haben. Natürlich können Sie in Runtime eine Benutzerklasse als Convenience-Wrapper definieren, müssen diese aber nicht in der Datenbank speichern . In der Tat können Nutzermodelle, die in Ihrer App und in auth0 leben, kontraproduktiv sein, da Sie sie synchron halten müssen.

Hoffe, das hilft!