Как использовать внешние службы проверки подлинности на ASP.NET MVC Web Api

Я занимаюсь разработкой ASP.NET MVC Web Api с Visual Studio 2013, С# и .NET Framework 4.5.1.

Я читал эту статью, и она очень интересная. В нем говорится только о приложениях ASP.NET MVC и ничего не говорится о том, как реализовать его с помощью Web Api.

Я думаю, что могу использовать его с Web Api, но я не знаю как, потому что, как я читал в статье, мне понадобится страница входа, а у web api ее нет.

Если я буду использовать этот веб-API с мобильных телефонов (iOS, Android, Windows Phone и т.д.); Что мне нужно сделать?

Возможно, мне понадобится форма входа в мобильном приложении, или мне понадобится страница входа в мой веб-интерфейс, чтобы разрешить вход в Google, Facebook и т.д.

Любой совет?

Ответ 1

@VansFannel, это старый вопрос, и я предполагаю, что вы пошли дальше, но я оставляю это здесь для будущих искателей.

Вы правы, он не предлагает страницу входа, но он предлагает то, что сама страница входа будет использовать.

Прежде чем начать, скачайте плагин Chrome под названием PostMan. По мере использования я покажу несколько скриншотов. Я установил базовый WebAPI с образцом контроллера Values, который все еще в нем, но защищен с помощью [Authorize]. Я использую мой пример WebAPI по адресу http://localhost: 54211 для этого примера.

Вот процесс высокого уровня:

Создание пользователя

Я предполагаю, что у вас еще нет пользователей в этой новой БД, но если вы просто пропустите это. В противном случае вы создадите их без пользовательского интерфейса.

  • POST на http://localhost: 54211/api/Аккаунт/Регистрация
    • Сообщение должно быть в формате x-www-form-urlencoded и должно содержать следующие поля:
      • электронная почта --- Например, "[email protected]"
      • пароль --- Например "Test123!"
      • Подтверждение пароля --- Например, "Test123!"

Если тело пусто и статус заголовка был 200, то это было успешно:

Если это не удалось, вы получите ошибку состояния заголовка 400 и некоторую ошибку в теле, например:

Проверка подлинности

Хорошо, у нас есть пользователь в базе данных, давайте аутентифицироваться с помощью WebAPI.

  • POST на http://localhost: 54211/токен
    • Сообщение должно быть в формате x-www-form-urlencoded и должно содержать следующие поля:
    • grant_type --- установите его в "пароль"
    • имя пользователя --- Например, "[email protected]"
    • пароль --- Например "Test123!"

В результатах с сервера, в случае успеха (статус 200), вы получите то, что называется "токеном на предъявителя" - оно находится в поле "access_token", например так:

Для вашего теста скопируйте это значение токена в буфер обмена (в вашем приложении вы можете сохранить его в переменной).

Вызов метода WebAPI с токеном носителя

Если вы попытаетесь вызвать защищенный метод [Authorize] без аутентификации, вы увидите что-то вроде этого:

Но вы уже аутентифицированы, верно? Так почему же он тебя больше не знает? Поскольку он основан на REST и не имеет состояния - он больше не узнает вас после завершения вызова. Таким образом, вы должны "напоминать" ему о том, кто вы есть, каждый раз, когда вам звонят. Вы делаете это, передавая полученный ранее токен с каждым запросом.

  • Вызовите URL (http://localhost: 54211/api/Values /), используя любой глагол, который вам нужен (GET, POST и т.д.). Я использую GET ниже, потому что в ValuesController это то, что требуется.
    • В заголовок запроса я добавляю следующее поле: "Авторизация" и его значение в виде "Bearer [token]", где [token] - токен, который вы сохранили ранее.

Если вы вернетесь успешно (200), вы можете проверить его данные тела, и он будет иметь ваш ответ:

И вот как это сделано! Я надеюсь, что это поможет вам или другим в будущем.

Ответ 4

Web api обеспечивает поддержку интеграции с такими социальными сетями, как facebook, twitter, microsoft, google через конвейер owin.

Найдите образец здесь, который предоставляет поддержку входа в facebook для веб-api.