Ключи API в дополнение к OAuth OWIN/Web Api

У меня есть интересный сценарий, на который я рассчитываю получить некоторые рекомендации.

В настоящее время я реализовал OAuth, используя стандартные функции OWIN с Web API и ASP.NET Identity. Также успешно реализована функция "Учетные данные клиента", которая позволяет клиентам (таким как браузеры и айфоны) осуществлять доступ к API для анонимного режима операций, пока не произойдет вход в систему RO.

Теперь у нас есть сценарий, в котором мы хотим создать виджет javascript (JSONP), аналогичный Stripe Checkout ( https://stripe.com/docs/checkout). Как вы увидите, этот виджет можно довольно легко внедрить, предоставив простой атрибут data-key как часть тега script. Мое предположение состоит в том, что он создается в бэк-энде как простой ключ API, но в дополнение к списку зарегистрированных доменов, из которых он может быть вызван. Когда этот ключ передается в API, API проверяет его по домену, из которого был сделан запрос, чтобы убедиться, что API может получить доступ к необходимым ресурсам, предоставленным ключу.

Мои вопросы: 1. Как я могу реализовать ключ API в дополнение к токенам OAuth Bearer в конвейере OWIN? Вся документация, которую я вижу, обычно предполагает написание отдельного обработчика делегата для поиска ключей и т. Д., Но разве мой конвейер OWIN не зайдет так далеко, потому что вызов самого действия не авторизован? 2. Мы также явно удаляем любую другую аутентификацию, кроме OAuth, в следующих строках кода:

   config.SuppressDefaultHostAuthentication();
   config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
  1. Существует ли более простой способ проверки клиентов с помощью только идентификатора клиента (без секретов) для режимов javascript, поскольку хранение секретов практически невозможно в js-средах?

  2. Я упускаю что-то очевидное, что я мог бы сделать, чтобы упростить этот процесс?

Я думаю, что мы все выяснили с точки зрения создания виджета JSONP, но эта часть немного смутила меня.

Любая помощь будет очень ценится!

Cheerz, Anup

1 ответ

Решение

Поскольку Owin является конвейером, все промежуточные программы аутентификации выполняются при каждом запросе. В вашем примере запрос может прийти с ключом API в заголовке: первым промежуточным ПО для аутентификации может быть ваша аутентификация oauth/bearer - если нет соответствующего заголовка, никакая идентификационная информация не будет прикреплена к запросу этой частью промежуточного программного обеспечения и запрос продолжается по конвейеру. Следующим промежуточным программным обеспечением может быть какое-то промежуточное программное обеспечение для аутентификации ключей API (вы можете найти реализацию здесь: https://github.com/jamesharling/Microsoft.Owin.Security.ApiKey), которое обнаружит заголовок вашего API-ключа и прикрепит соответствующий идентификатор к запрос.

Другие вопросы по тегам