Я'м начинаю разрабатывать веб-службы REST, и я понял, лучший подход к аутентификации. Сервис позволяет пользователям получить доступ и управлять своими собственными данными, так что требуется некоторый тип проверки подлинности пользователя. Я'вэ смотрел на эти варианты:
Протокол OAuth, кажется, больше о разрешении вместо проверки подлинности. Я планирую обрабатывать разрешение изначально в сервисы, так что я не ищу решение для этого. Но, с OAuth, также подходит для проверки подлинности?
OpenID, безусловно, обеспечивает решение для проверки подлинности, но это зацепило больше, чтобы позволить пользователям использовать свои учетные данные 3-й группы (Гугл, Яндекс и т. д.) Хотя я хотел бы поддержать в этом, это не основная проблема для меня, и я, безусловно, позволяют пользователям зарегистрироваться с родной учетные данные (адрес электронной почты/пароль).
Это легко реализовать, но это's в моем понимании, что это не очень безопасный метод. Также, казалось бы, требовать обмена учетные данные для каждого доступа, но я'д предпочитаю проверка пользователя один раз, а затем продолжить доступ через токен сессии.
В основном, крен мой собственный логин/знак обслуживания поколения, и требует действительный маркер доступа ко всем прочим ресурсам (очевидно, все было бы по SSL).
А также создания веб-сервисов, я'll тоже будет дом клиента (веб) приложение, которое использует эти услуги от имени пользователя, но я не'т хотите, чтобы приложение, чтобы сохранить данные/данные/и т. д. Так, что-то вроде этого:
Пользователей (проверки подлинности электронной почты/пароль или 3 участника учетные данные) --> веб-приложения (проверки подлинности идентификатора приложения) --> веб-сервисы
И снова, я хочу, чтобы позволить другим получить сборки клиентов так же, так что средний уровень может быть любой приложение 3 участника:
Пользователей (проверки подлинности электронной почты/пароль или 3 участника учетные данные) --> приложение 3 участника (проверки подлинности идентификатора приложения) --> веб-сервисы
Мой топ-уровне требования:
Итак, мой вопрос, на основании вышеизложенного (пожалуйста, дайте мне знать, если это слишком расплывчато), есть и "Лучшее" на подходе? Несколько OAuth или OpenID соответствующие, или я делаю это слишком сложно, и вместо того, чтобы просто сдаться мои собственные проверки подлинности?
Редактировать:
Я думаю, мне нужно реализовать следующее:
родной учетных данных/маркеры (базовой HTTP-аутентификации через SSL?)
в OpenID "и опорой партии", чтобы мои API, чтобы использовать OpenIDs, находящийся на другом сервере (т. е. на "поддержку 3 идентификационные данные партии")
на базе протокола OAuth на "потребителей", чтобы разрешить мои API для доступа к 3-сторонних услуг (например, доступа пользователя'ы LinkedIn профиль).
с OpenID на "поставщик", чтобы позволить людям использовать API'родной идентификаторы с другом (необязательно)
на базе протокола OAuth на "поставщик", чтобы позволить 3-сторонних приложений для доступа к API на пользователей' имени (необязательно)
Это кажется правильным, или я больше сложным, чем он должен быть?
Вы могли бы рассмотреть помощью JWT (JSON веб-маркеры) см. JWT в проект RFC. Это, безусловно, удовлетворить ваши требования безопасности и сессии срока. Однако, проект стандарта это'ы вряд ли будут широко использовать прямо сейчас, это может скоро измениться, поскольку JWT с частью протокола OAuth 2.0. JWT в легко реализовать в большинстве языков, и есть много уже библиотеки. В качестве простого объяснения, а токенов JWT состоят из 3 частей , заголовка , тела и подпись. Заголовок и тело JSON-объекты, будучи basee64url закодированных (алфавиты различаются из base64 в 2-х последних символов), а затем подписал с HMAC256 (или другой алгоритм, заданный в заголовке) в RFC объяснить, как именно создать эту подпись. Вы, возможно, захотите, чтобы проверить это генератор онлайн маркер.
JWT в заголовки HTTP и дружелюбный параметры запроса.
Хороший вариант, чтобы рассмотреть это 'общий ключ проверки подлинности'. Это тип проверки подлинности веб-службы Amazon и Windows Azure хранилище использует сервис. Мы использовали общий ключ проверки подлинности в службе REST, которые мы разработали. Вы можете сделать быстрый поиск в Google 'общий ключ проверки подлинности' вы получите много сведений.
Я написал один пост в блоге здесь об этом.
Шаги высокого уровня являются:
Мое предложение заключается в проверке подлинности первого запроса, а затем настроить маркер сеанса.
Интерфейсное приложение будет хранить знак и предоставлять его с каждым последующим запросом.
Маркер будет иметь срок действия. Маркер истекает, если не используется в течение определенного периода.
Маркер может быть связан с исходным IP-адресом для дополнительной безопасности.
Знак может передаваться как печенье, или как один из параметров запроса в URL.
Если заморачиваться проверки подлинности клиента SSL приемлема, вы могли бы использовать для взаимной проверки подлинности по протоколу SSL. Каждому клиенту будет предоставлен сертификат, который доверяет сервер. Это может быть один и тот же сертификат или другие сертификаты, если вы должны относиться к клиентам по-разному.
Исходя из ваших требований, я думаю, протокол OAuth 2.0
на самом деле может быть интересным вариантом. OAuth-это действительно протокол авторизации, но он также проверяет
клиенту параметр ClientID и clientSecret
. Вы можете использовать учетные данные клиента потока и решил не включать маркер
, таким образом пользователь имеет "ключ доступа", который истекает после определенного количества времени. А с OAuth-это широко используемый протокол их уже многие клиентские и серверные библиотеки для вас и ваших клиентов в использовании.
Если вы считаете, что OAuth-это слишком тяжелый или слишком сложно для вашего приложения, я бы, наверное, придерживаться базовой аутентификацииза
протокол HTTPS`. Но, как я также указал в другой ответ на подобный вопрос, я бы не изобрести свой собственный механизм аутентификации.
Для получения дополнительной информации вы также можете посмотреть на другие ответы Я'вэ учитывая ранее на подобный вопрос: https://stackoverflow.com/a/15003777/849741
Я'вэ реализован и выпущен с открытым исходным кодом основной сервис, который позволяет подлинности, он может легко быть изменен, чтобы позволить 3-кортежей входа, если это необходимо. Это около 2-х лет и написана на Java за весной, так что вы, возможно, захотите пересмотреть технологию, но это работает и вы можете получить представление о том, как он'ы сделали. Найти его здесь, на Google, или выполните блоге об этом. Обратите внимание, что приложение не загружается на cloudbees, но если вы установите его на свой счет все должно быть нормально.
Вы могли бы использовать HTTP basic авторизации, где пароль передается не пароль, а знак, что клиент приобрел на разных запроса к ресурсу, где он/она/оно должен обеспечить его/ее пароль только один раз (возможно даже на другой канал). Это не безопасно, человек-в-середине атаки (как там's не подписывание сообщений), но идея, что вы можете всегда потребовать от клиента для создания динамического маркера как-то (т. е. на авт сервис свой), а потом передавать этот маркер в замене пароля, так что пароль не передается по сети. Да, это выглядит как-то "таможня авт решений", но это на самом деле это't, потому что вы можете навязать какие-либо правила на знак-пароль, как, используя фирменный знак, как пароль, сессии или пересчитывается при каждом запросе (без раскрытия секретов) так что сервер может проверить сообщение, - что когда-либо ваши потребности. идея в том, чтобы отправить в проверке маркера как-то "пароль" из базовой аутентификации HTTP-запрос, а не полагаться на более сложные протоколы, а не исключить все (на ваше усмотрение).
Я предлагаю использовать весной загрузки ваших веб-служб RESTful, потому что тогда вы можете использовать весной безопасности, чтобы реализовать свои собственные проверки подлинности на основе их шаблонов. Вы можете реализовать собственную пользовательскую проверку подлинности путем расширения или реализации их базовых классов безопасности и интерфейсов соответственно. У вас также есть возможность включить другой механизм авторизации, который вы'вэ перечисленных весной загрузки, если это необходимо.
Протокола OAuth 2.0 является способом пойти, если вы только нужно разрешение.Вы могли бы использовать OpenID подключения, который обеспечивает проверку подлинности и поддерживающих OAuth2.0 для авторизации. Для OepnID подключения, существует множество сертифицированных продуктов, доступных, если вам нужно Сервис Настройки самостоятельно, есть много онлайн-сервисов тоже.