Я ищу, чтобы понять сущность механики авторизации, чтобы я мог разработать стратегию для моей ситуации.Как защитить действия контроллера в приложении MVC, которое не содержит данные db или пользователя?
Мое положение состоит в том, что я являюсь частью распределенного приложения. Моя часть - это приложение MVC5, которое в основном состоит из нескольких контроллеров, которые возвращают одностраничные приложения. Итак, нажмите контроллер A и верните одностраничное приложение A. Хит-контроллер B и получите одностраничное приложение B. И т.д. Это приложение не содержит базы данных или пользовательских данных. Некоторые другие приложения на совершенно другом сайте/сервере. Я хочу спросить, что другое приложение, если пользователь действителен, или попросить пользователей напрямую обратиться к другому приложению и разрешить доступ только к моим приложениям, если ответ да. Поэтому, по сути, я хочу защитить свои контроллеры на основе слова удаленного приложения, которое содержит открытую api для проверки имени пользователя/пользователя.
Мне было предложено, чтобы маркерная аутентификация - это путь. Это немного сложно с моей нехваткой опыта, но я похоронил себя в некоторых чтениях и видео-презентациях. Вот моя текущая, слабая попытка обобщить задачу, основанную на ограниченном понимании. Пожалуйста, исправьте при необходимости:
маркер- Доступ должен быть сгенерирован
- Получение маркер доступа не является частью контроллера счета, это часть Owin промежуточного
- Маркер доступа будет отправлен вместе с просьбы о моих действиях регулятора,
- моего контроллера действия, декорированном с [Authorize] атрибутом, будет разбирать маркер и сделать правильную вещь
Вопросов:
- Q1: Должен ли я генерировать токен или другое приложение - одно с данными db и пользователем?
- Q2: Мои контроллеры ничего не знают о пользователях. Эти данные находятся в другом приложении. Что конкретно контролируют контроллеры под капотом, чтобы делать правильные вещи? По сути, что конкретно говорит им: «Да, этот запрос в порядке. Верните представление».
- Q3: Я снова начал свой проект с помощью стандартного шаблона проекта MVC5, который поставляется с VS2015, потому что я решил, что буду обращаться с пользователями/логином и т. Д. Это оказалось не так. Должен ли я вернуться и повторить этот проект с нуля, потому что этот шаблон не соответствует этому требованию или я могу сделать некоторые операции на нем и продолжить? Например, я не знаю, имеет ли этот шаблон все материалы OWIN, которые мне нужны, или, может быть, слишком много лишнего мусора (раздутый контроллер учетных записей, Entity Framework и т. Д.), Которые легко преобразуются/поддерживаются.
- Q4: Является ли авторизация токена здесь? Существует ли более простой способ запретить пользователям неавторизованных пользователей доступ к моим действиям контроллера, что имеет большее значение с учетом характера проекта?
Любое понимание будет оценено по достоинству.
Обновление: Что я имел в виду в Q2, было, пожалуй, проще, как работает [Авторизоваться]? Детали? Я предполагаю, что должен сказать, как работать. Например, глупый пример для иллюстрации. Если бы я хотел сказать контроллеру, украшенному [Авторизовать], чтобы кто-нибудь из тех, у кого есть имя пользователя «fred», как и где я это сделаю? Я не столько ищу код. Я думаю концептуально. Мое приложение должно знать что-то о токенах, которые другое приложение (аутентификационное приложение) генерирует. В общих чертах, что бы я добавил в мое приложение MVC, чтобы рассказать ему, как декодировать эти токены? Где его добавить? Есть ли одно стандартное место?
Это зависит от вашей схемы аутентификации, но посмотрите на токены аутентификации, их создание, хранение и передачу. – meganaut
Благодарим за отзыв. Я посмотрю на это. У вас есть конкретные ответы на вопросы Q1, Q2, Q3 и Q4 выше? Ищите больше «почему», чем как и что - более глубокое понимание проблемного пространства. Еще раз спасибо. – Robert