Подтвердить что ты не робот

Аутентификация службы REST

Какова наилучшая практика для реализации аутентификации для REST apis?

Использование BASIC auth + SSL или что-то вроде http://tools.ietf.org/html/draft-hammer-http-token-auth-01?

Существуют ли существующие решения (для .NET/WebApi)?

4b9b3361

Ответ 1

Ответ на это зависит от аудитории вашего веб-API и от того, что вы хотите точно проверить.

  • Вы хотите аутентифицировать клиентское приложение, которое использует ваш Api?
  • Вы хотите аутентифицировать пользователя из своего приложения для извлечения своих данных в клиентском приложении (используя Api)?
  • Или вы хотите аутентифицировать как клиентское приложение, так и пользователя с помощью клиентского приложения.

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

Обычная проверка подлинности:. Очень легко реализовать, но вы аутентифицируете клиентское приложение, а не пользователь. Такая аутентификация хороша, когда необходимы доверительные отношения с бизнесом, а проверка подлинности и безопасность - это не ваша первая проблема. Но нет способа отслеживать вызов в вашем API обратно определенному пользователю, просто клиентскому приложению. Конечно, вы могли бы сохранить свое имя пользователя и пароль в клиентском приложении, но это плохая практика более чем одним способом.

Аутентификация на основе токена:. Их много способов аутентификации токенов, но тот, о котором я говорю, - это единственный токен для пользователя, который пользователь копирует в клиентское приложение, чтобы получить доступ к вашему Апи. Таким образом, вы можете аутентифицировать пользователя (который сделал этот вызов в моем Api?) И его довольно легко сделать и использовать. Вывод заключается в том, что он не самый безопасный способ, требует взаимодействия с пользователем и что пользователь, возможно, использует свой токен Api более чем в одном приложении. Вы можете расширить этот способ аутентификации с помощью базовой проверки подлинности для проверки подлинности клиента. Итак, clientid + clientsecret + токен идентифицирует пользователя. Но я думаю, что если вы захотите это сделать, лучше взглянуть на Oauth2.

OAuth2: Если вы хотите иметь полный доступ к вашей аутентификации, вы можете пойти этим путем. Это, возможно, самый лучший путь к будущему, но также требует наибольшей работы (по крайней мере, на стороне поставщика удостоверений/поставщиков ресурсов. В клиентском приложении довольно легко реализовать это с помощью множества доступных клиентских библиотек. этот способ аутентификации (также основанный на токенах) позволяет аутентифицировать клиента и пользователя без необходимости использования имени пользователя и пароля пользователей.

Моя рекомендация: будет проходить с базовой аутентификацией, если это подходит вашему делу, это легко и вместе с HTTPS достаточно безопасно. Если это не подходит, я бы пошел с Oauth2, потому что он является самым прочным и стандартным (Instagram/Google/Facebook), дает вам много свободы и с растущей экосистемой становится проще и проще реализовать. В конце концов, для тех, кто реализует ваш API, гораздо интереснее узнать что-то о Oauth 2.0, а затем узнать о способе jgauffin делать вещи.

Ссылка: Я также хотел бы пригласить вас посмотреть сайт Apigee. Api - их бизнес, и у них есть довольно интересные чтения. Одним из них является бесплатная электронная книга - Oauth the large picture, в которой также есть интересный параграф, где они спрашивают, действительно ли вам нужен Oauth. (Со страницы 16 - OAuth все, что вам нужно для безопасности API?)

API-интерфейсы от сервера к серверу - API, предназначенные для использования только небольшим числом серверов - OAuth - это излишество. Наличие отдельного набора удостоверений подлинности для каждого приложения является приятным функция OAuth, но для использования сервер-сервер необходимо безопасно войти в систему с помощью браузера, или реализовать другие шаги в танце OAuth, мешает. Вместо этого, используя простой стандарт безопасности, такой как проверка подлинности HTTP Basic и назначение для каждого приложения достаточно уникального пароля. Двухсторонний SSL - еще один хороший, хотя громоздкий подход, который имеет преимущество более прочной, более прослеживаемой аутентификации. Однако подумайте заранее! Действительно ли эти API действительно будут использоваться серверами навсегда?

Существующие решения:. Каким бы способом вы ни выбрали наименьшую привилегию - Доминик Байер и его пакеты с nuget могут дать вам хороший головной убор. Внедрение basic authentication с помощью Identitymodelдействительно легко. Также, если вы хотите готовый к использованию identityserver, чтобы предоставить вам токены, посмотрите на его сервер идентификации, который делает все, что вы можете придумать. Однако, если вы решите пойти на Oauth2, я бы также посмотрел на DotnetOpenAuth, так как это (imho) немного более настраиваемо и проще настроить на ваш собственный, но он также требует больше работы.