Как сервер авторизации проверяет секретность client_secret в Oauth2.0

#oauth-2.0 #authorization

Вопрос:

В контексте OAuth2.0, После того, как RO (Владелец ресурса) утвердит согласие (нажимает «Разрешить») , AS (Сервер авторизации) перенаправит клиента на переданный клиентом redirect_uri и добавит параметры запроса, например (код и состояние):

 https://example-app.com/redirect?code=<the auth code>amp;state=<state>
 

Затем клиент должен обменять (отправляет их в AS): authorization_code client_id client_secret на токен доступа

Okta определяет client_secret как таковой:

client_secret — Секрет клиента приложения. Это гарантирует, что запрос на получение маркера доступа будет сделан только из приложения, а не от потенциального злоумышленника, который, возможно, перехватил код авторизации

НО как, черт возьми, Сервер авторизации знает, как проверить то client_secret , что создал клиент ???

Ответ №1:

Клиент не создавал секрет клиента. При создании нового клиента на сервере авторизации сервер авторизации генерирует секрет клиента (если тип клиента является конфиденциальным, у открытого клиента нет секрета). Вы получаете идентификатор client_id и client_secret с сервера авторизации и используете его в своем клиенте.

Комментарии:

1. Хорошо, итак, в случае публичного клиента, как AS проверяет, что клиенту доверяют? если публичный клиент не отправляет client_secret

2. Вам нужен токен доступа для доступа к ресурсам, поэтому пользователь должен войти в систему. Я не уверен, какой проверки вы ожидаете. Публичные клиенты менее защищены, чем конфиденциальные.

3. Вы должны использовать PKCE, чтобы предотвратить хакера, который перехватил код авторизации для получения токенов.