2016-02-09 2 views
0

Я искал вокруг какое-то время и абсолютно никто, кажется, не ответил правильно.Аутентификация с использованием пароля паролей Oauth от внешнего интерфейса

Предположим, у меня есть «ненадежное» клиентское приложение: front-end AngularJS. Этот front-end хочет достичь моего api, поэтому пользователь должен пройти аутентификацию сначала каким-то образом.

Так что если я использую пароль пароля oauth, пользователь должен заполнить его учетные данные в форме HTML, а приложение Angular должно отправить запрос, добавляющий client_id и client_secret.

То, что я не понимаю, что все и спецификации говорят, что client_secret должна оставаться тайной ...

Это абсурд, вы должны послать client_secret аутентифицировать, но в то же время вы должны держать он неизвестен из Javascript?

Так что мой вопрос:

Как использовать OAuth поток пароль из ненадежного клиента (веб-фронтального или мобильное приложение), не раскрывая client_secret?

Действительно ли это возможно или просто невозможно соблюдать эту спецификацию?

ответ

1

Вы не должны использовать поток пароля, а использовать неявное (ака маркера) поток , который не включает в себя client_secret.

Этот поток предназначен для приложений только для клиентов, включая приложения с интерфейсом JS, такие как приложения, которые вы описываете.

Помимо проблемы, которую вы заметили, использование потока паролей из клиентских приложений вызывает возможные проблемы с проверкой подлинности. Предположим, например, поставщик удостоверений использует двухфакторное auth или, возможно, делегирует аутентификацию другому провайдеру. С потоком паролей, где это приложение для запроса имени пользователя/пароля, на самом деле нет способа справиться с этим. С другой стороны, неявный поток состоит в перенаправлении потока поставщику, и это зависит от провайдера для аутентификации с использованием любых доступных средств.

Что вы получаете от неявного потока - это токен, который вы можете использовать непосредственно у клиента.

+0

Извините, но это не решает проблему, вы скрываете ту же проблему в предложении «это зависит от поставщика для аутентификации с использованием любых доступных средств», который, как я понимаю, требует от провайдера реализовать пароль поток, который, в свою очередь, является ошибочным. Должен быть безопасный способ справиться с этим. Вы что-то знаете об этом? Спасибо. – singe3

+0

Поставщику не требуется реализовать поток паролей, когда он реализует неявный поток. Под «любыми средствами» я имею в виду два фактора, связанных с мобильным телефоном, сканирование глаз, что угодно. Полностью независим от любых реализованных потоков OAuth. Я думаю, вы либо путаете некоторые понятия о самом OAuth, либо есть какое-то другое недоразумение. Проверка имени пользователя/пароля поставщиком сама по себе является чем-то совершенно иным, чем позволить вашему приложению отправлять имя пользователя/пароль и ожидать получить токен. –

Смежные вопросы