Ich möchte ein Beispiel für die Authentifizierung und Autorisierung in einer SPA-angularjs-Anwendung mit asp.net MVC Webapi als Back-End-und Client-Seiten-Routing (keine cshtml) erstellen. Im Folgenden finden Sie ein Beispiel für Funktionen, die zum Einrichten des vollständigen Beispiels verwendet werden können. Aber ich kann das alles nicht zusammensetzen. Jede Hilfe wird geschätzt.AngularJS clientside Routing und Token-Authentifizierung mit Webapi
Fragen:
- Was best practice ist: Plätzchen oder Token basiert?
- Wie erstelle ich das Bearer-Token in eckigen, um bei jeder Anfrage zu autorisieren?
- Validierung der API-Funktionen?
- Wie behalte ich den Benutzernamen, den der Benutzer auf dem Client angemeldet hat?
Beispielcode:
Anmelden Form
<form name="form" novalidate> <input type="text" ng-model="user.userName" /> <input type="password" ng-model="user.password" /> <input type="submit" value="Sign In" data-ng-click="signin(user)"> </form>
Authentifizierung Winkelregler
$scope.signin = function (user) { $http.post(uri + 'account/signin', user) .success(function (data, status, headers, config) { user.authenticated = true; $rootScope.user = user; $location.path('/'); }) .error(function (data, status, headers, config) { alert(JSON.stringify(data)); user.authenticated = false; $rootScope.user = {}; }); };
Meine API Backend-API-Code.
[HttpPost] public HttpResponseMessage SignIn(UserDataModel user) { //FormsAuthetication is just an example. Can I use OWIN Context to create a session and cookies or should I just use tokens for authentication on each request? How do I preserve the autentication signed in user on the client? if (this.ModelState.IsValid) { if (true) //perform authentication against db etc. { var response = this.Request.CreateResponse(HttpStatusCode.Created, true); FormsAuthentication.SetAuthCookie(user.UserName, false); return response; } return this.Request.CreateErrorResponse(HttpStatusCode.Forbidden, "Invalid username or password"); } return this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState); }
Authorization die JWT-Bibliothek verwendet für Inhalte zu beschränken.
config.MessageHandlers.Add(new JsonWebTokenValidationHandler { Audience = "123", SymmetricKey = "456" });
Meine API-Methoden
[Authorize] public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; }
Das ist wirklich eine großartige Erklärung, genau das, was ich gesucht habe. Vielen Dank für die Antworten und detaillierte Beispiele. –
Sicher, froh, dass ich helfen konnte :) – bernhardw
Gibt es trotzdem eine Aktualisierung des Zugriffstokens durch einen versteckten i-Frame (vorausgesetzt, der Authentifizierungsserver erinnert sich an seine vorherige Berechtigung)? – g18c