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

Вопросы о потреблении вашего собственного API с помощью OAuth

Я создаю RESTful API для проекта, над которым я работаю, и хотел бы, чтобы основное приложение потребляло API, потому что:

  • Это приведет к тому, что один набор кода будет поддерживать
  • Если мы решим разоблачить API для сторонних разработчиков, это уже будет сделано
  • Это открывает возможность сделать мобильные приложения, которые его потребляют.
  • Я действительно хочу узнать, как это сделать.

API будет размещен на субдомене https://api.example.com, а основное веб-приложение будет размещено в корневом домене https://example.com.

Концептуально я понимаю, как все работает, но мой главный вопрос заключается в том, как поток аутентификации изменится, если вообще. Обычно сторонние приложения:

  • Получить токен запроса из https://api.example.com/request_token
  • Перенаправить пользователя для аутентификации на https://api.authenticate.com/authorize
  • Получить перенаправление обратно в стороннее приложение
  • Получить токен доступа из https://api.example.com/access_token

Поскольку я контролирую оба домена, могу ли я сделать что-то похожее на:

  • Получить токен запроса, когда пользователь приземляется на экране входа в систему https://www.example.com
  • Пользователь аутентифицируется с использованием формы на https://www.example.com, которая вызывает тот же код, что и https://api.example.com/authorize
  • Если учетные данные действительны, токен запроса заменяется на токен доступа
  • Маркер доступа сохраняется в сеансе и истекает, когда пользователь выходит из него, как обычно,

Шаг 3 чувствует себя неправильно, так как будет дублированный код, но разве он не откроет меня для атак XSS, это форма входа в систему на https://www.example.com отправила данные в https://api.example.com, так как они являются технически разными доменами?

Неужели я слишком сильно себя чувствую?

4b9b3361

Ответ 1

Я столкнулся с той же проблемой и решил ее так.

1 Для сторонних приложений, использующих мой API, они должны аутентифицироваться через OAuth для всех запросов.

2 Для моих собственных сторонних клиентов (мобильный, AIR и т.д.) Они используют OAuth, с той разницей, что я разрешаю им отправлять имя пользователя и пароль непосредственно на этапе авторизации (чтобы я мог создать собственный диалог входа в систему). Это обеспечивается тем, что ваш API работает через SSL/HTTPS.

3 Для моего веб-приложения я использую аутентификацию cookie для доступа к API. I. После входа в систему пользователь может просто вызвать API: URL-адреса и вернуть JSON/XML. Приятно также быстро изучить API-интерфейсы (хотя настоящая API-консоль, такая как APIGee, делает лучшую работу там).

Ответ 2

Я бы сказал, что вы немного его немного смущаете. Если ваш код разделен правильно, вы можете легко создать тонкий слой REST поверх уровня обслуживания приложений, а ваши контроллеры приложений будут тонким слоем поверх вашего уровня обслуживания.