Недостоверная аутентификация аутентификации api с oauth2
Я провел некоторое расследование относительно аутентификации с подтверждением api. Большинство людей указали на Oauth2 для спокойной аутентификации api. Я просмотрел некоторые из них, особенно эту ссылку https://developers.google.com/accounts/docs/OAuth2.
Мне кажется, Oauth2 предназначен для стороннего приложения для доступа к данным пользователей в google/facebook (или другом поставщике данных).
Наша проблема заключается в том, что у нас есть данные, нам не нужно обращаться к нашему клиенту с данными третьих сторон, а наши клиенты не имеют каких-либо сторонних данных. Мы хотим защитить наш api какой-то аутентификацией.
В нашем случае, какие удобные технологии для нашей спокойной аутентификации api? Мы будем выставлять наш api следующим образом
https://ourdomain.com/api/<endpoint>
Наши клиенты могут сначала получить доступ к веб-сайту для регистрации https://ourdomain.com, и они должны иметь возможность получить clientId и clientKey с нашего сайта для доступа к apis. Наши клиенты должны иметь возможность потреблять через некоторую аутентификацию
Ответы
Ответ 1
Если я правильно понимаю, что вам нужно, это похоже на OAuth таким образом, что вы делаете то же самое, минуя предоставление стороннему приложению доступа к пользовательским ресурсам.
В OAuth существует центральная система, которая управляет аутентификацией и авторизацией, проверяя учетные данные пользователя и учетные данные пользователя и выдавая маркеры авторизации. Существует несколько конечных точек, которые будут принимать эти токены авторизации.
Знаки - это в основном зашифрованные строки, содержащие информацию об учетных данных пользователя и другую информацию, которая может понадобиться вашему приложению.
То, что вам нужно (я считаю), является аналогичной конечной точкой аутентификации, что клиент нажимает свои учетные данные и получает токен.
Итак,
i) Создайте регистрационную форму/консоль, где клиент может зарегистрироваться и получить свои учетные данные. Посмотрите this.
ii) Определите конечную точку HTTP, в которой пользователь меняет свои учетные данные для токена доступа + токен обновления.
iii) Клиент может попасть в конечную точку ресурса с помощью токенов доступа, чтобы сделать аутентифицированные вызовы на любую из ваших конечных точек.
iv) На задней панели вам понадобится общая служба, которая проверяет токены и извлекает информацию из нее.
PS - Это всего лишь минимальная система, было бы много соображений безопасности, например, что, если какое-то несанкционированное приложение получит доступ к некоторым токенам доступа к клиенту.
Вы можете найти много информации о CSRF-атаках, нонах, временных метоках и других методах смягчения проблем безопасности.
Ответ 2
В oAuth 2.0 существует несколько типов типов грантов. Тип гранта - это всего лишь способ обмена некоторыми учетными данными для токена доступа. Обычно oAuth относится к стороннему использованию с помощью гранта для кода авторизации. Это означает перенаправление пользователя на веб-сайт владельца ресурса для аутентификации, который вернет обратно код авторизации.
Это явно не имеет смысла для использования 1-й стороны, потому что вы являетесь владельцем ресурса. oAuth 2.0 рассмотрел это и включил для этой цели грант учетных данных для владельца ресурса. В этом случае вы можете обменивать имя пользователя и пароль для токена доступа на первом уровне.
Подробнее см. http://tools.ietf.org/html/rfc6749#section-4.3.
Ответ 3
Просто, чтобы понять первоначальный вопрос:
OAuth2 требует, по крайней мере, клиента и сервера
OP задавалась вопросом, как защитить API REST, и почему все говорят о сторонних поставщиках аутентификации (Google, Facebook,...)
Здесь есть две разные потребности:
1 - Возможность защитить персональный API (ourdomain.com)
Client Server
Consumers <----> Your API
2 - Возможность использования общедоступного API (например, получение списка контактов пользователя Google)
Client Server
You <----> Google APIs
OP действительно нуждается в первом: реализовать сервер OAuth2 перед своим собственным API.
Существуют многие существующие реализации для всех языков/фреймворков в Github
Наконец, вот одно хорошее техническое описание Oauth2, и я бесстыдно беру одну из своих схем здесь:
![Схема Google OAuth2]()
Нет, я не работаю в Google, я просто беру Google в качестве публичного примера поставщика API.