#asp.net #asp.net-mvc #rest #asp.net-web-api #asp.net-identity
#asp.net #asp.net-mvc #rest #asp.net-web-api #asp.net-идентификация
Вопрос:
Мне нужно иметь RESTful API, который я мог бы вызывать из веб-приложения MVC5, чтобы изначально выполнять простую аутентификацию / авторизацию исключительно на локальном сервере sql. Мне нужно иметь возможность передавать учетные данные для входа из веб-приложения в api, чтобы получить токен заголовка и т.д. Затем мне нужно иметь возможность проверять токен на наличие любых запросов на извлечение данных или сохранение данных обратно в БД. Я использую обучающий пример приложения здесь прямо сейчас, пока не разберусь в функциональности.
веб-сторона — это просто форма с кнопкой и некоторым jquery для отслеживания нажатия кнопки отправки:
$(document).ready(function () {
var register = function() {
var dataa = {
Email: "password@host.com",
Password: "password",
ConfirmPassword: "password"
};
$.ajax({
type: 'POST',
url: 'api/Account/Register',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(dataa)
});
return false;
}
$('#btnRegister').click(register);
});
и затем, вот контроллер самого api:
[Authorize]
[RoutePrefix("api/Account")]
public class AccountController : ApiController
{
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (!result.Succeeded)
{
return GetErrorResult(result);
}
return Ok();
}
}
И теперь, когда я пытаюсь щелкнуть по нему, оно выдает ошибку 404.
Комментарии:
1. Создание веб-приложения с помощью Visuat Studio путем включения Web API, MVC и аутентификации (индивидуальных учетных записей пользователей) дает вам проект, в котором есть практически все, и это неплохая отправная точка. И в Интернете есть много руководств по Web API и безопасности Web API. Кроме того, ваш вопрос слишком широк для ответа, вам нужно сосредоточиться на том, что у вас не работает.
2. Итак, проблема, с которой я сталкиваюсь, заключается в том, что я создаю новый веб-API с отдельными учетными записями пользователей, и у него все настроено, но я изо всех сил пытаюсь понять, как создать простую страницу входа, которая передает имя пользователя / пароль этому api. Руководства, которые я нашел, похоже, помогают либо с веб-приложением, либо с аутентификацией api, но не обязательно с соединением между ними. Мне просто нужно лучше понять концепции, вот почему я оставил это расплывчатым, я не знаю, какие вопросы задавать.
3. Stack Overflow на самом деле не предназначен для предоставления руководств (или ссылок на учебные пособия). На самом деле это больше о помощи с кодом. Если вы продвинулись достаточно далеко, чтобы у вас был общий доступ к коду, это, вероятно, лучший путь.
4. Обновлено, чтобы добавить код для более конкретного вопроса на основе примера, предложенного @infiniteRefactor
Ответ №1:
Аутентификация в WebAPI основана на аутентификации OAuth на основе токена.
Существует URL-адрес аутентификации (/Token для созданного по умолчанию проекта), и когда вы делаете POST-запрос на этот URL с именем пользователя и паролем, вы получаете токен в ответ. Ваше клиентское приложение должно хранить этот токен и прикреплять его к каждому запросу, чтобы получить авторизацию.
По сути, этот процесс генерации токенов и их распознавания обеспечивается компонентами OWin, которые подключены к вашему конвейеру приложений. Вы можете изучить StartUp.Auth.cs
порядок инициализации этих компонентов.
В вашей форме входа нет ничего особенного. Оно просто отправит имя пользователя и пароль в URL аутентификации.
Способ хранения токена на стороне клиента может варьироваться в зависимости от вашего дизайна. Наиболее предпочтительными способами хранения токена являются использование cookie или специального хранилища токенов в Javascript.
Вы можете ознакомиться с этим руководством для примера и обсуждения основ.
Комментарии:
1. Итак, у меня загружен образец приложения для этого руководства, но все это в одном проекте, и для моих целей мне нужны отдельные API и веб-приложение. Итак, я добавляю новый проект в решение и копирую поверх домашнего контроллера и индексного представления, но он использует
2. <привязка данных формы=»отправить: регистрация»> <привязка данных формы= «отправить: вход»> итак, как мне изменить это, чтобы получить доступ к api?