Какова цель клиента в OAuth2?

У меня есть приложение, предлагающее API. Это приложение является поставщиком OAuth2.

Я хочу получить доступ к этому API (чтение и запись) только с клиентской стороны. Я использую JSO, чтобы сделать это проще.

Он отлично работает.

Дело в том, что мне не нужно вводить мой клиентский секрет (приложения, которое я зарегистрировал в своем приложении) в любом месте. И я понимаю, почему это было бы доступно для всех.

Итак, если я могу получить доступ к своей api без секретности клиента, не могли бы вы объяснить мне, в чем его цель?

Ответ 1

Клиентская тайна использовалась в OAuth 1.0 для подписи запроса, поэтому это было необходимо. Некоторые серверы OAuth2 (такие как API веб-сервера Google) требовали, чтобы клиентский секрет отправлялся для получения токена доступа (либо от маркера запроса, либо от токена обновления).

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

Ответ 2

Это обсуждение дает отличное объяснение, почему секрет клиента гораздо важнее для серверных приложений, чем приложения на стороне клиента. Выдержка:

Веб-приложения [серверные приложения] используют клиентские секреты, поскольку они представляют собой огромные векторы атаки. Скажем, кто-то изъявляет запись DNS и настраивает приложение-жулик "похожий", что может быть замечено в течение нескольких месяцев, причем этот посредник всасывает массу данных. Секреты клиента должны смягчать этот вектор атаки. Для однопользовательских клиентов компромисс должен поступать по одному устройству за раз, что плохо сравнивается.

Ответ 3

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

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

Другими словами, сервер представит мне, человека, экран входа в систему, если у меня еще нет действующего сеанса входа в систему с сервером. Вот почему объяснения всегда говорят что-то вроде "до сервера для аутентификации".

Конечно, серверу не нужно требовать, чтобы я вошел в систему. Является ли это реалистичным? Будет ли Dropbox действительно предоставлять доступ к Моим файлам кому угодно без входа? Конечно нет. Большинство объяснений, которые я прочитал, глядят на этот вопрос, как будто это не имеет значения, когда это практически единственное, что имеет значение.