2016-01-04 3 views
6

Немного новичок в OAUTH и хотел спросить, правильно ли я понял что-то. Я использую Owin и C# и настройка I следующий сценарий:Понимание client_id и client_secret

  1. пользователь делает запрос к моей маркера конечной точки, переходящие в имя пользователя/пароль с grant_type пароля. Если учетные данные действительны, я создаю JWT.

  2. Пользователь получает обратно JWT, а затем клиент использует этот маркер идти вперед для всех запросов

  3. Любых запросы, требующих авторизации Я использую претензии маркера, чтобы обеспечить пользователь разрешен сделать этот запрос.

Так где же клиент_ид и client_secret входят в это? Это просто дополнительный уровень безопасности, чтобы сказать «прежде чем вы даже сможете получить токен, вам нужно передать мне еще один набор учетных данных (id/secret), и только если те действительны, в дополнение к вашему имени пользователя/пароль при условии, вы можете получить обратно JWT

хотел бы понять, кто два связаны - Спасибо столько

+0

Те используются на проверки маркера, чтобы убедиться, как стороннего матча. Как нравится, когда вы используете ключ api-карты google. Один создается на их стороне для вас, когда вы регистрируетесь, и вы получаете тот же ключ, который вы будете передавать по каждому запросу. –

ответ

3

И client_id, и client_secret не используются в потоке паролей. Однако, как вы, вероятно, знаете, OAuth2 имеет другие потоки, подходящие для других сценариев.

А именно:

  • авторизации код потока используется в веб-приложениях, которые проходят проверку подлинности стороны пользователей сервера. Клиент_ид используется в первоначальном перенаправлении, client_secret используется на последнем этапе, когда приложение обменивает один временной код для токена.

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

Краткий справочник всех различных потоков: https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified

+0

Итак, когда я просто хочу, чтобы пользователь входил в систему, это звучит так, как будто мне не нужен client_id или client_secret? Или, если да, почему я не могу позволить пользователю войти в систему с именем пользователя/паролем, чтобы вернуть токен, и я закончил? – NullHypothesis

+0

@ user3379785: почему? Потому что, чтобы узнать имя пользователя/пароль, ваше приложение должно попросить обоим. И никто не собирается рисковать предоставлять свои учетные данные google/facebook, предоставляя их на неизвестной странице. Поток кода авторизации ** перенаправляет ** браузер на страницу провайдера, чтобы на странице были предоставлены учетные данные, не оставляя места для нежелательной утечки. –

+0

Мой внешний интерфейс находится в том же домене, что и мой backend API. И только мое приложение - это тот, кто делает звонки, чтобы получить JWT с именем пользователя/паролем пользователя. Так что, в моем случае, нет необходимости в client_id или в секрете? Я действительно не видел, как секрет используется, поскольку это прямые вызовы JS для моего API, а мой backend API обрабатывает проверку учетных данных и выдачу JWT. – NullHypothesis

0

есть две стороны, которые должны быть заверены:?! приложение и пользователь

.

Приложение аутентифицируется с идентификатором и тайной, возможно, с резервным копированием URL-адреса обратного вызова, что должно гарантировать, что запрос ipient токена является правильным.

Пользователь аутентифицирован через поставщика OAuth. Он может использовать для этого имя пользователя/пароль или то, что считает поставщик OAuth. Этот токен используется, чтобы приложение могло получать пользовательские данные, не зная имя пользователя и пароль.

+0

Итак, это просто для предотвращения несанкционированного доступа приложений к моему API? Даже если вызов является анонимным действием в моем API, я могу ограничить использование, так что только клиент может получить к нему доступ? хорошо, спасибо. Как правило, вы всегда хотите передать ключ/секрет API, а также токен в каждом запросе? – NullHypothesis

+0

Да, это базовый механизм аутентификации. –