Мы строим службу отдыха, и мы хотим использовать OAauth 2 для авторизации. текущий проект (v2-16 от 19 мая) описывает четыре типа грантов. Это механизмы или потоки для получения авторизации (токен доступа).
- Код авторизации
- Неявный грант
- Учетные данные владельца ресурса
- Клиентские полномочия
Кажется, мы должны поддерживать всех четырех из них, поскольку они служат различным целям. Первые два (и, возможно, последний) могут быть использованы из сторонних приложений, которым необходим доступ к API. Код авторизации является стандартным способом авторизации веб-приложения, которому посчастливилось проживать на защищенном сервере, в то время как неявный поток грантов будет выбором для клиентского приложения, которое не может хранить конфиденциальность своих учетных данных (например, приложение для мобильных/настольных компьютеров, JavaScript-клиент и т.д.).
Мы хотим использовать третий механизм самостоятельно, чтобы обеспечить лучший пользовательский интерфейс на мобильных устройствах - вместо того, чтобы вводить пользователя в диалоговое окно входа в веб-браузер и т.д., Пользователь просто вводит свое имя пользователя и пароль непосредственно в приложении и логин.
Мы также хотим использовать тип гранта Client Credentials для получения токена доступа, который может использоваться для просмотра общедоступных данных, не связанных с каким-либо пользователем. В этом случае это не столько авторизация, сколько нечто похожее на ключ API, который мы используем для доступа только к зарегистрированным нам приложениям, что дает нам возможность отменить доступ, если это необходимо.
Итак, мои вопросы:
- Как вы думаете, я правильно понял назначение различных типов грантов?
- Как вы можете хранить конфиденциальные данные своего клиента? В третьем и четвертом случае нам нужно иметь клиентский идентификатор и клиентский секрет где-то на клиенте, что не похоже на хорошую идею.
- Даже если вы используете неявный тип гранта, и вы не раскрываете секретность своего клиента, что мешает другому приложению выдавать себя за ваше приложение с использованием того же механизма авторизации и вашего идентификатора клиента?
Подводя итог, мы хотим использовать клиентские учетные данные и учетные данные владельца ресурса из клиентского приложения. Оба этих потока требуют, чтобы вы каким-то образом хранили секрет клиента, но клиент является мобильным или JavaScript-приложением, поэтому их можно было легко украсть.