Я хочу создать пример аутентификации и авторизации в приложении SPA angularjs, используя asp.net mvc webapi в качестве бэкэнд-сервера и клиентской маршрутизации (без cshtml). Ниже приведен только пример функций, которые можно использовать для создания полного примера. Но я просто не могу все это сказать. Любая помощь была оценена.
Вопросы:
- Что лучше всего: Cookie или Token?
- Как создать токен-носитель в angular для авторизации по каждому запросу?
- Проверка функций API?
- Как сохранить аутентификацию, подписанную пользователем на клиенте?
Пример кода:
-
Вход в систему
<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>
-
Аутентификация angular Контроллер
$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 = {}; }); };
-
Код API моей API-интерфейса.
[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); }
-
Авторизация Использование библиотеки JWT для ограничения содержимого.
config.MessageHandlers.Add(new JsonWebTokenValidationHandler { Audience = "123", SymmetricKey = "456" });
-
Мои методы API
[Authorize] public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; }