2016-08-02 21 views
1

Ich bin neu in der mobilen Entwicklung. Mein Projekt wird mit asp.net erstellt. Für die Authentifizierung verwende ich Build UserManager & User.Identity.nativescript authentifizieren bei Back-End-Web-API

Ich habe Bündel von bestehenden Web-API und ich möchte sie von mobilen App verwenden. Ich weiß, ich könnte nach der Authentifizierung einen geheimen Hash an Web API übergeben, aber das würde einen riesigen Code Refactoring beinhalten.

Ich frage mich, ob es andere Möglichkeiten gibt, Authentifizierung zu behandeln & Autorisierung mit nativescript & asp.net.

Kennen Sie nützliche Ressourcen für dieses Thema?

Vielen Dank für Ihre Hilfe!

+1

Verwenden Sie das NativeScript-Angular-Modul? Wenn dies der Fall ist, wäre das Nachverfolgen der angular2 Auth-Themen ein guter Anfang und das Speichern des Auth-Schlüssels, wie George unten angibt. Schauen Sie sich auch das Beispiel in GitHub an: https://github.com/NativeScript/nativescript-angular/blob/master/ng-sample/app/examples/router/login-test.ts, besonders wenn Sie den neueren verwenden Router. – Matthew

+0

Mein Hauptproblem ist, wie man die unterstützte Sitzung aufrecht erhält. Asp.net gibt nach einer Anmeldung ein Authentifizierungs-Cookie zurück. Ich versuche @George Edwards Kommentar zu verwenden und speichern Sie den Cookie bei appSetting –

+0

@SimeonGrigorovich gut mein Ansatz ist ein Staatenloser - wo Sie keine Sitzung (viel mehr skalierbar) pflegen müssen. Sie legen JWTs so fest, dass sie eine Ablaufzeit/ein Ablaufdatum haben, und jede Anfrage mit einem gültigen JWT wird autorisiert. Keine Notwendigkeit, Informationen über alle eingeloggt zu haben. –

Antwort

7

Es hängt sehr stark auf Ihre API-Struktur, aber ich würde somethign wie folgt empfehlen:

Erstens würden Sie das Nativescript Http Modul verwenden müssen. Eine Implementierung ein ein HTTP-GET-Anrufe bekommen zurück Header könnte wie folgt aussehen:

http.request({ url: "https://httpbin.org/get", method: "GET" }).then(function (response) { 
    //// Argument (response) is HttpResponse! 
    //for (var header in response.headers) { 
    // console.log(header + ":" + response.headers[header]); 
    //} 
}, function (e) { 
    //// Argument (e) is Error! 
}); 

So Backend könnte ein JSON-Web-Token als Header zurück. In diesem Fall würden Sie Ihren Token wahrscheinlich im persistenten Speicher der Anwendungen speichern. Ich würde das Application Settings Modul verwenden, die etwas aussehen würde: Dann

var appSettings = require("application-settings"); 
appSettings.setString("storedToken", tokenValue); 

, bevor Sie einen API-Aufruf für ein neues Token machen Sie prüfen, ob es eine gespeicherte Wert:

var tokenValue = appSettings.getString("storedToken"); 
if (tokenValue === undefined { 
    //do API call 
} 

dann mit Ihr Token möchten Sie einen API-Aufruf, z diese POST und fügen Sie das Token als Header:

http.request({ 
    url: "https://httpbin.org/post", 
    method: "POST", 
    headers: { "Content-Type": "application/json", "Auth": tokenValue }, 
    content: JSON.stringify({ MyVariableOne: "ValueOne", MyVariableTwo: "ValueTwo" }) 
}).then(function (response) { 
    // result = response.content.toJSON(); 
    // console.log(result); 
}, function (e) { 
    // console.log("Error occurred " + e); 
}); 

Ihr Back-End der Auth Header und Validierung der JWT überprüfen müssten, um zu entscheiden, ob der Anruf anzunehmen oder abzulehnen.

Alternativ gibt es einige schöne Plugins für verschiedene Backends-as-a-Service, z.B. Azure und Firebase

+0

Danke mann. Mit Ihrer Hilfe habe ich einen JWT Guide gefunden: http://bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-and-identity-2 / –