Arhn - архитектура программирования

Лучший механизм аутентификации для доступа к веб-сервисам RESTful

Я разрабатываю restful webservice, который будет использоваться третьими сторонами. Они должны пройти аутентификацию, чтобы использовать мой Restful service. Для этого я планирую использовать два подхода для их аутентификации.

  1. Использование другой службы Restful в качестве прокси для доступа к службам Restful: для доступа к службе RESTful пользователь отправит имя пользователя и пароль этому прокси-классу в методе POST. Если имя пользователя и пароль верны, уникальный идентификатор (например, ключ аутентификации) будет сгенерирован и отправлен в ответе. Когда будет сделан следующий запрос, пользователь отправит ключ аутентификации (и другие данные для доступа к целевой службе Restful) в полезных данных запроса. Этот ключ аутентификации будет проверен прокси-сервером. Если ключ действителен, прокси вызовет целевую службу restful и вернет ответ клиенту. В противном случае сообщение об ошибке будет отправлено в резонансе.

  2. Аутентификация на основе сервлетов: такая же, как и в первом подходе, но сервлет будет действовать как прокси для доступа к веб-сервисам. В этом подходе имя пользователя и пароль будут проверяться сервлетом, и, если он правильный, сервлет установит некоторый файл cookie в ответ и отправит его в клиент. В следующий раз, когда пользователь отправляет файл cookie запроса, будет проверен. Если он действителен, сервлет вызовет службу Restful и отправит ответ. Но я не уверен, будет ли запрос пользователя содержать cookie или нет.

При первом подходе пользователю необходимо отправлять ключ аутентификации для каждого запроса. Но во втором подходе это не нужно.

Мне нужно знать, какой подход лучше? .. а также любой другой способ справиться с этим ..



Ответы:


1

Я не эксперт в сервлетах или Java, если честно, я знаю, как много чего делать на Java, но это не моя основная среда. Однако я знаю много о безопасности, особенно о REST.

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

Второй вариант не рекомендуется. Есть несколько статей, указывающих на множество проблем с решениями на основе файлов cookie. На самом деле, их легче выдать за другое лицо и получить незаконный доступ. В любом случае вы никогда не отправляете cookie, вы обязательно отправляете заголовок, который содержит некоторую информацию о cookie. Имейте в виду, что вы ВСЕГДА каким-то образом отправляете информацию об авторизации с помощью этих механизмов. Независимо от того, как вы это делаете и прозрачны для клиента или нет, авторизация ДОЛЖНА перемещаться, потому что основным принципом REST является статичность:

Каждый запрос к Api происходит в полной изоляции. ... неправильно заставлять сервер переходить на страницу

Цитирую мои собственные слова моей команде.

Что касается использования очень известного метода, я бы выбрал широко используемый протокол OAuth 2.0. Эта концепция аналогична вашему подходу, в котором в результате согласования безопасности создается токен-носитель:

http://self-issued.info/docs/draft-ietf-oauth-v2-bearer.html

Сам токен содержит много информации, и есть несколько статей о них с точки зрения конфиденциальной информации, которую вы можете раскрыть.

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

Это всегда зависит от того, насколько чувствительна ваша услуга, всегда есть компромисс с точки зрения того, насколько безопасно вам ее сделать, и сколько ресурсов и времени вы можете потратить.

26.11.2015
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..