Это все из-за соображений безопасности.
OAuth 2.0 хотел соответствовать этим двум критериям:
- У всех разработчиков не будет сервера с поддержкой SSL, и вы должны разрешить им используйте URI перенаправления не-HTTPS
- Вы не хотите, чтобы хакеры могли украсть токены доступа / refre sh путем перехвата запросов.
Так как грант кода авторизации имеет дополнительный шаг обмена кода авторизации для маркера доступа, он обеспечивает дополнительный уровень безопасности, отсутствующий в типе неявного предоставления.
Согласно Нейту Барбеттини, мы хотим дополнительный шаг обмена кодом аутентификации для доступа токен, потому что код аутентификации может использоваться в переднем канале (менее безопасный), и токен доступа может использоваться в обратном канале (более безопасный).
Таким образом, преимущество безопасности состоит в том, что токен доступа не подвергается воздействию браузера и, следовательно, не может быть перехвачен / получен из браузера. Мы больше доверяем веб-серверу, который общается по обратным каналам. Токен доступа, который является секретным, может затем остаться на веб-сервере и не быть доступным для браузера (т. Е. Фронтальных каналов).
Для получения дополнительной информации посмотрите это фантастическое видео c:
OAuth 2.0 и OpenID Connect (на простом английском языке sh) https://youtu.be/996OiexHze0?t=26m30s (запуск 26 минут)