1 added
1 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>20 авг 2024</li>
2
<ul><li>20 авг 2024</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Как приложения обмениваются данными и обеспечивают вашу безопасность в интернете.</p>
4
</ul><p>Как приложения обмениваются данными и обеспечивают вашу безопасность в интернете.</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6
<p>Филолог и технарь, пишет об IT так, что поймут даже новички. Коммерческий редактор, автор технических статей для vc.ru и "Хабра".</p>
6
<p>Филолог и технарь, пишет об IT так, что поймут даже новички. Коммерческий редактор, автор технических статей для vc.ru и "Хабра".</p>
7
<p>Эта статья предназначена для тех, кто слышал о технологии OAuth 2.0 и хочет понять, что это такое и как она работает. Мы постараемся рассказать о возможностях OAuth 2.0 простым языком и представим список ресурсов для дальнейшего, более углублённого изучения.</p>
7
<p>Эта статья предназначена для тех, кто слышал о технологии OAuth 2.0 и хочет понять, что это такое и как она работает. Мы постараемся рассказать о возможностях OAuth 2.0 простым языком и представим список ресурсов для дальнейшего, более углублённого изучения.</p>
8
<p><strong>Содержание</strong></p>
8
<p><strong>Содержание</strong></p>
9
<ul><li><a>Определение OAuth 2.0</a></li>
9
<ul><li><a>Определение OAuth 2.0</a></li>
10
<li><a>Различия OpenID и OAuth 2.0</a></li>
10
<li><a>Различия OpenID и OAuth 2.0</a></li>
11
<li><a>Роли в OAuth 2.0</a></li>
11
<li><a>Роли в OAuth 2.0</a></li>
12
<li><a>Принцип работы протокола OAuth 2.0</a></li>
12
<li><a>Принцип работы протокола OAuth 2.0</a></li>
13
<li><a>Регистрация клиентского приложения</a></li>
13
<li><a>Регистрация клиентского приложения</a></li>
14
<li><a>Авторизация в OAuth 2.0</a></li>
14
<li><a>Авторизация в OAuth 2.0</a></li>
15
<li><a>Основные потоки OAuth 2.0</a></li>
15
<li><a>Основные потоки OAuth 2.0</a></li>
16
<li><a>Основы безопасности для систем, использующих OAuth 2.0</a></li>
16
<li><a>Основы безопасности для систем, использующих OAuth 2.0</a></li>
17
<li><a>Что дальше</a></li>
17
<li><a>Что дальше</a></li>
18
</ul><p><a>OAuth 2.0 (Open Authorization 2.0)</a> - это протокол, который позволяет одному приложению получить ограниченный доступ к вашим данным на другом сервисе без передачи логина и пароля. Вместо этого приложение получает временный токен, разрешающий выполнять только те действия, на которые вы согласились.</p>
18
</ul><p><a>OAuth 2.0 (Open Authorization 2.0)</a> - это протокол, который позволяет одному приложению получить ограниченный доступ к вашим данным на другом сервисе без передачи логина и пароля. Вместо этого приложение получает временный токен, разрешающий выполнять только те действия, на которые вы согласились.</p>
19
<p>Представьте фоторедактор, который хочет получить доступ к вашим фотографиям в облачном хранилище. Благодаря протоколу OAuth 2.0 программа не получает ваш логин и пароль от облачного сервиса. Она перенаправит вас на сайт облачного сервиса, например "Google Диск" или Dropbox, где вы войдёте в свой аккаунт.</p>
19
<p>Представьте фоторедактор, который хочет получить доступ к вашим фотографиям в облачном хранилище. Благодаря протоколу OAuth 2.0 программа не получает ваш логин и пароль от облачного сервиса. Она перенаправит вас на сайт облачного сервиса, например "Google Диск" или Dropbox, где вы войдёте в свой аккаунт.</p>
20
<p>После этого вам предложат разрешить приложению доступ к фотографиям. Если вы согласитесь, облачный сервис выдаст приложению временный токен, который позволит работать только с вашими фотографиями, не затрагивая другие данные.</p>
20
<p>После этого вам предложат разрешить приложению доступ к фотографиям. Если вы согласитесь, облачный сервис выдаст приложению временный токен, который позволит работать только с вашими фотографиями, не затрагивая другие данные.</p>
21
<p>Без OAuth 2.0 приложение запрашивало бы ваш логин и пароль от облачного сервиса, что могло бы быть использовано злоумышленниками. В этом случае вместе с фотографиями вы бы предоставили доступ ко всей информации в облаке, включая личные файлы. OAuth 2.0 защищает от таких рисков, предоставляя только необходимый и ограниченный доступ.</p>
21
<p>Без OAuth 2.0 приложение запрашивало бы ваш логин и пароль от облачного сервиса, что могло бы быть использовано злоумышленниками. В этом случае вместе с фотографиями вы бы предоставили доступ ко всей информации в облаке, включая личные файлы. OAuth 2.0 защищает от таких рисков, предоставляя только необходимый и ограниченный доступ.</p>
22
<p>OAuth 2.0 является<a>официальным стандартом авторизации</a>, утверждённым организацией<a>IETF (Internet Engineering Task Force)</a>. Ранее существовала<a>первая версия протокола</a>, которая<a>требовала</a>сложных криптографических подписей для каждой операции, что затрудняло её интеграцию. Во второй версии процесс упростился, стал более масштабируемым и получил концепцию различных типов токенов.</p>
22
<p>OAuth 2.0 является<a>официальным стандартом авторизации</a>, утверждённым организацией<a>IETF (Internet Engineering Task Force)</a>. Ранее существовала<a>первая версия протокола</a>, которая<a>требовала</a>сложных криптографических подписей для каждой операции, что затрудняло её интеграцию. Во второй версии процесс упростился, стал более масштабируемым и получил концепцию различных типов токенов.</p>
23
<p>Помимо OAuth 2.0, существуют и другие протоколы для управления доступом и идентификацией пользователя. Например, SAML и OpenID.<a>SAML (Security Assertion Markup Language)</a>чаще используется в корпоративных системах для обмена данными между доменами при аутентификации и авторизации.<a>OpenID</a>сравнивают с OAuth 2.0, поскольку оба протокола связаны с авторизацией, но решают разные задачи. В следующем разделе мы рассмотрим разницу между OpenID и OAuth 2.0.</p>
23
<p>Помимо OAuth 2.0, существуют и другие протоколы для управления доступом и идентификацией пользователя. Например, SAML и OpenID.<a>SAML (Security Assertion Markup Language)</a>чаще используется в корпоративных системах для обмена данными между доменами при аутентификации и авторизации.<a>OpenID</a>сравнивают с OAuth 2.0, поскольку оба протокола связаны с авторизацией, но решают разные задачи. В следующем разделе мы рассмотрим разницу между OpenID и OAuth 2.0.</p>
24
<p>Протоколы OpenID и OAuth 2.0 связаны с аутентификацией и авторизацией. Поэтому сначала разберём эти понятия, а затем объясним различия между протоколами.</p>
24
<p>Протоколы OpenID и OAuth 2.0 связаны с аутентификацией и авторизацией. Поэтому сначала разберём эти понятия, а затем объясним различия между протоколами.</p>
25
<p><strong>Аутентификация</strong>- это проверка личности пользователя, позволяющая системе убедиться, что он действительно тот, за кого себя выдаёт. Например, если некий Илон Маскович хочет войти в личный кабинет интернет-магазина через свой аккаунт в "Яндексе", система аутентификации проверит его данные и решит, разрешить вход или запретить.</p>
25
<p><strong>Аутентификация</strong>- это проверка личности пользователя, позволяющая системе убедиться, что он действительно тот, за кого себя выдаёт. Например, если некий Илон Маскович хочет войти в личный кабинет интернет-магазина через свой аккаунт в "Яндексе", система аутентификации проверит его данные и решит, разрешить вход или запретить.</p>
26
<p><strong>Авторизация</strong>- это процесс определения того, какие действия и доступ к данным имеет пользователь или приложение на сервисе. Например, если Илон Маскович сфотографирует ракету и захочет загрузить её в облачное хранилище через приложение для синхронизации фотографий, авторизация позволит получить доступ только к нужным данным. Сервис получит временный токен, который ограничит его функции. В этом случае токен может разрешить только загрузку фотографий в облако, а доступ к другим данным, таким как личные документы или списки контактов, будет закрыт.</p>
26
<p><strong>Авторизация</strong>- это процесс определения того, какие действия и доступ к данным имеет пользователь или приложение на сервисе. Например, если Илон Маскович сфотографирует ракету и захочет загрузить её в облачное хранилище через приложение для синхронизации фотографий, авторизация позволит получить доступ только к нужным данным. Сервис получит временный токен, который ограничит его функции. В этом случае токен может разрешить только загрузку фотографий в облако, а доступ к другим данным, таким как личные документы или списки контактов, будет закрыт.</p>
27
<p>Авторизация также может предоставлять различные уровни доступа - например, приложение может иметь право только на чтение данных, но не на их изменение или только на изменение, но не на удаление. Такие ограничения помогают обеспечить дополнительный уровень безопасности и предотвратить несанкционированный доступ к личной информации.</p>
27
<p>Авторизация также может предоставлять различные уровни доступа - например, приложение может иметь право только на чтение данных, но не на их изменение или только на изменение, но не на удаление. Такие ограничения помогают обеспечить дополнительный уровень безопасности и предотвратить несанкционированный доступ к личной информации.</p>
28
<p>Теперь о протоколах:<strong>OpenID</strong> - это протокол аутентификации, который подтверждает личность пользователя и передаёт эту информацию стороннему сервису.<strong>OAuth 2.0</strong> - это протокол авторизации, который управляет доступом одного приложения к данным или функциям другого сервиса на основе предоставленных пользователем разрешений. Запомнить несложно: OpenID отвечает за аутентификацию, а OAuth 2.0 - за авторизацию.</p>
28
<p>Теперь о протоколах:<strong>OpenID</strong> - это протокол аутентификации, который подтверждает личность пользователя и передаёт эту информацию стороннему сервису.<strong>OAuth 2.0</strong> - это протокол авторизации, который управляет доступом одного приложения к данным или функциям другого сервиса на основе предоставленных пользователем разрешений. Запомнить несложно: OpenID отвечает за аутентификацию, а OAuth 2.0 - за авторизацию.</p>
29
<p>Важно отметить, что эти протоколы часто работают вместе. Например, это реализовано в <a>OpenID Connect</a> - расширении OAuth 2.0. OpenID Connect сначала выполняет аутентификацию пользователя, а затем выдаёт разрешения на доступ к его данным.</p>
29
<p>Важно отметить, что эти протоколы часто работают вместе. Например, это реализовано в <a>OpenID Connect</a> - расширении OAuth 2.0. OpenID Connect сначала выполняет аутентификацию пользователя, а затем выдаёт разрешения на доступ к его данным.</p>
30
<p>Например, когда вы заходите на сайт через Google-аккаунт, OpenID Connect сначала выполняет проверку вашей личности (аутентификация), а затем предоставляет доступ к базовой информации профиля (авторизация). Это удобно, так как позволяет использовать одну учётную запись для множества сервисов, сохраняя при этом контроль над вашими данными.</p>
30
<p>Например, когда вы заходите на сайт через Google-аккаунт, OpenID Connect сначала выполняет проверку вашей личности (аутентификация), а затем предоставляет доступ к базовой информации профиля (авторизация). Это удобно, так как позволяет использовать одну учётную запись для множества сервисов, сохраняя при этом контроль над вашими данными.</p>
31
<p>В реализации протокола OAuth 2.0 участвуют четыре ключевых роли: владелец ресурса, клиент, авторизационный сервер и ресурсный сервер. Рассмотрим каждую из них.</p>
31
<p>В реализации протокола OAuth 2.0 участвуют четыре ключевых роли: владелец ресурса, клиент, авторизационный сервер и ресурсный сервер. Рассмотрим каждую из них.</p>
32
<p><strong>Владелец ресурса</strong> - это пользователь, который предоставляет приложению доступ к своим данным. Например, Илон Маскович будет владельцем ресурса, если разрешит приложению доступ к своим фотографиям в облачном хранилище.</p>
32
<p><strong>Владелец ресурса</strong> - это пользователь, который предоставляет приложению доступ к своим данным. Например, Илон Маскович будет владельцем ресурса, если разрешит приложению доступ к своим фотографиям в облачном хранилище.</p>
33
<p><strong>Клиент</strong> - это приложение или сайт, который запрашивает доступ к данным владельца ресурса. Поскольку клиент не имеет прямого доступа к данным, он использует авторизационный токен, выданный владельцем ресурса. В нашем примере клиентом будет приложение, которое запрашивает доступ к фотографиям Илона для их синхронизации или выполнения других действий.</p>
33
<p><strong>Клиент</strong> - это приложение или сайт, который запрашивает доступ к данным владельца ресурса. Поскольку клиент не имеет прямого доступа к данным, он использует авторизационный токен, выданный владельцем ресурса. В нашем примере клиентом будет приложение, которое запрашивает доступ к фотографиям Илона для их синхронизации или выполнения других действий.</p>
34
<p><strong>Авторизационный сервер</strong> - это система, которая проверяет личность владельца ресурса, выдаёт токены доступа и управляет разрешениями, предоставленными клиенту. Сервер удостоверяется, что Илон Маскович действительно является владельцем ресурса. После проверки он выдаёт временный токен или отказывает в доступе, если учётные данные не совпадают.</p>
34
<p><strong>Авторизационный сервер</strong> - это система, которая проверяет личность владельца ресурса, выдаёт токены доступа и управляет разрешениями, предоставленными клиенту. Сервер удостоверяется, что Илон Маскович действительно является владельцем ресурса. После проверки он выдаёт временный токен или отказывает в доступе, если учётные данные не совпадают.</p>
35
<p><strong>Ресурсный сервер</strong> - это система, которая хранит данные владельца ресурса и предоставляет к ним доступ на основе временных токенов. В нашем примере это облачное хранилище, где Маскович хранит свои фотографии. Ресурсный сервер принимает токен от приложения, проверяет его и открывает доступ к фотографиям. Он также может разрешать различные действия, такие как просмотр, загрузка или удаление файлов. Конкретный список разрешённых действий зависит от прав, предоставленных владельцем ресурса.</p>
35
<p><strong>Ресурсный сервер</strong> - это система, которая хранит данные владельца ресурса и предоставляет к ним доступ на основе временных токенов. В нашем примере это облачное хранилище, где Маскович хранит свои фотографии. Ресурсный сервер принимает токен от приложения, проверяет его и открывает доступ к фотографиям. Он также может разрешать различные действия, такие как просмотр, загрузка или удаление файлов. Конкретный список разрешённых действий зависит от прав, предоставленных владельцем ресурса.</p>
36
<p>В предыдущем разделе мы рассмотрели роли в OAuth 2.0, а теперь давайте разберём, как они взаимодействуют. Для этого рассмотрим упрощённую схему получения доступа к данным.</p>
36
<p>В предыдущем разделе мы рассмотрели роли в OAuth 2.0, а теперь давайте разберём, как они взаимодействуют. Для этого рассмотрим упрощённую схему получения доступа к данным.</p>
37
<p><strong>Направление на сервер авторизации.</strong>Клиентское приложение перенаправляет владельца ресурса на сервер авторизации через URL с уникальными параметрами запроса:</p>
37
<p><strong>Направление на сервер авторизации.</strong>Клиентское приложение перенаправляет владельца ресурса на сервер авторизации через URL с уникальными параметрами запроса:</p>
38
<ul><li>client_id - идентификатор клиентского приложения;</li>
38
<ul><li>client_id - идентификатор клиентского приложения;</li>
39
<li>redirect_uri - URI для перенаправления после авторизации;</li>
39
<li>redirect_uri - URI для перенаправления после авторизации;</li>
40
<li>scope - права доступа, которые запрашивает приложение.</li>
40
<li>scope - права доступа, которые запрашивает приложение.</li>
41
</ul><p>По этим параметрам сервер распознаёт приложение и определяет, какие права оно запрашивает.</p>
41
</ul><p>По этим параметрам сервер распознаёт приложение и определяет, какие права оно запрашивает.</p>
42
<p><strong>Ввод учётных данных.</strong>На сервере авторизации пользователь вводит логин и пароль или другие данные. После успешной проверки сервер запросит разрешение у владельца ресурса предоставить доступ клиенту.</p>
42
<p><strong>Ввод учётных данных.</strong>На сервере авторизации пользователь вводит логин и пароль или другие данные. После успешной проверки сервер запросит разрешение у владельца ресурса предоставить доступ клиенту.</p>
43
<p><strong>Получение кода авторизации.</strong>После согласия сервер выдаёт код авторизации и перенаправляет пользователя обратно в приложение, передавая код через URL. Этот код имеет ограниченный срок действия и может быть использован только один раз.</p>
43
<p><strong>Получение кода авторизации.</strong>После согласия сервер выдаёт код авторизации и перенаправляет пользователя обратно в приложение, передавая код через URL. Этот код имеет ограниченный срок действия и может быть использован только один раз.</p>
44
<p><strong>Обмен кода на токен доступа.</strong>Клиентское приложение отправляет полученный код на сервер авторизации и обменивает его на токен доступа. Сервер проверяет код и выдаёт токен, который используется для запросов к ресурсному серверу.</p>
44
<p><strong>Обмен кода на токен доступа.</strong>Клиентское приложение отправляет полученный код на сервер авторизации и обменивает его на токен доступа. Сервер проверяет код и выдаёт токен, который используется для запросов к ресурсному серверу.</p>
45
<p><strong>Доступ к данным.</strong>Клиентское приложение использует токен для запроса данных у ресурсного сервера. В ответ сервер предоставляет доступ к запрашиваемым данным.</p>
45
<p><strong>Доступ к данным.</strong>Клиентское приложение использует токен для запроса данных у ресурсного сервера. В ответ сервер предоставляет доступ к запрашиваемым данным.</p>
46
<p>Рассмотрим процесс на примере фотографий Илона Масковича:</p>
46
<p>Рассмотрим процесс на примере фотографий Илона Масковича:</p>
47
<ul><li><strong>Авторизация.</strong>Илон запускает приложение для синхронизации фотографий и направляется на сервер авторизации, например "Google Диск".</li>
47
<ul><li><strong>Авторизация.</strong>Илон запускает приложение для синхронизации фотографий и направляется на сервер авторизации, например "Google Диск".</li>
48
<li><strong>Ввод учётных данных.</strong>На сервере Маскович вводит свои данные от аккаунта в Google. Сервер затем запросит разрешение предоставить приложению доступ к фотографиям.</li>
48
<li><strong>Ввод учётных данных.</strong>На сервере Маскович вводит свои данные от аккаунта в Google. Сервер затем запросит разрешение предоставить приложению доступ к фотографиям.</li>
49
<li><strong>Получение кода авторизации.</strong>Если Илон соглашается, сервер выдаёт код авторизации и перенаправляет его обратно в приложение через URL.</li>
49
<li><strong>Получение кода авторизации.</strong>Если Илон соглашается, сервер выдаёт код авторизации и перенаправляет его обратно в приложение через URL.</li>
50
<li><strong>Обмен кода на токен доступа.</strong>Приложение отправляет код на сервер авторизации и получает токен.</li>
50
<li><strong>Обмен кода на токен доступа.</strong>Приложение отправляет код на сервер авторизации и получает токен.</li>
51
<li><strong>Доступ к данным.</strong>Приложение использует токен для запроса данных у серверов "Google Диска". Ресурсный сервер проверяет токен и предоставляет доступ к фотографиям.</li>
51
<li><strong>Доступ к данным.</strong>Приложение использует токен для запроса данных у серверов "Google Диска". Ресурсный сервер проверяет токен и предоставляет доступ к фотографиям.</li>
52
</ul><p>Такое распределение ролей и последовательность процессов обеспечивают безопасный и контролируемый доступ к данным. Однако для начала работы с OAuth 2.0 необходимо зарегистрировать приложение. Далее мы рассмотрим, как это сделать.</p>
52
</ul><p>Такое распределение ролей и последовательность процессов обеспечивают безопасный и контролируемый доступ к данным. Однако для начала работы с OAuth 2.0 необходимо зарегистрировать приложение. Далее мы рассмотрим, как это сделать.</p>
53
<p>Чтобы начать использовать OAuth 2.0 в приложении, его необходимо зарегистрировать на сервере авторизации. Рассмотрим общие шаги и их последовательность. Для более подробного ознакомления рекомендуем обратиться к официальной спецификации, ссылка на которую приведена в последнем разделе статьи.</p>
53
<p>Чтобы начать использовать OAuth 2.0 в приложении, его необходимо зарегистрировать на сервере авторизации. Рассмотрим общие шаги и их последовательность. Для более подробного ознакомления рекомендуем обратиться к официальной спецификации, ссылка на которую приведена в последнем разделе статьи.</p>
54
<p>Зарегистрируйте приложение на платформе, поддерживающей OAuth 2.0, такой как Google или GitHub. Обычно это можно сделать через консоль разработчика или раздел на сайте платформы:</p>
54
<p>Зарегистрируйте приложение на платформе, поддерживающей OAuth 2.0, такой как Google или GitHub. Обычно это можно сделать через консоль разработчика или раздел на сайте платформы:</p>
55
<ul><li>Войдите в учётную запись разработчика на выбранной платформе, например в <a>Google Cloude Console</a>.</li>
55
<ul><li>Войдите в учётную запись разработчика на выбранной платформе, например в <a>Google Cloude Console</a>.</li>
56
<li>Создайте проект в консоли разработчика, который будет связан с вашим приложением. Проект служит контейнером для настроек и API, необходимых для управления приложением.</li>
56
<li>Создайте проект в консоли разработчика, который будет связан с вашим приложением. Проект служит контейнером для настроек и API, необходимых для управления приложением.</li>
57
<li>Введите основную информацию о приложении: название, описание и другие данные, помогающие идентифицировать ваше приложение на платформе.</li>
57
<li>Введите основную информацию о приложении: название, описание и другие данные, помогающие идентифицировать ваше приложение на платформе.</li>
58
</ul><p>После добавления приложения на платформу настройте параметры OAuth 2.0:</p>
58
</ul><p>После добавления приложения на платформу настройте параметры OAuth 2.0:</p>
59
<ul><li>укажите URL для перенаправления пользователя после успешной авторизации (redirect_uri);</li>
59
<ul><li>укажите URL для перенаправления пользователя после успешной авторизации (redirect_uri);</li>
60
<li>перечислите права доступа, которые приложение запрашивает у пользователя (scope).</li>
60
<li>перечислите права доступа, которые приложение запрашивает у пользователя (scope).</li>
61
</ul><p>После настройки параметров платформа предоставит:</p>
61
</ul><p>После настройки параметров платформа предоставит:</p>
62
<ul><li>клиентский идентификатор (client_id) - уникальный идентификатор, используемый сервером авторизации для определения приложения, запрашивающего доступ;</li>
62
<ul><li>клиентский идентификатор (client_id) - уникальный идентификатор, используемый сервером авторизации для определения приложения, запрашивающего доступ;</li>
63
<li>клиентский секрет (client_secret) - секретный ключ для подтверждения подлинности приложения при взаимодействии с сервером авторизации.</li>
63
<li>клиентский секрет (client_secret) - секретный ключ для подтверждения подлинности приложения при взаимодействии с сервером авторизации.</li>
64
</ul><p>Сохраните client_id и client_secret в безопасном месте и не передавайте их в браузер или на другое клиентское устройство. Утечка этих данных может привести к компрометации приложения и раскрытию конфиденциальной информации.</p>
64
</ul><p>Сохраните client_id и client_secret в безопасном месте и не передавайте их в браузер или на другое клиентское устройство. Утечка этих данных может привести к компрометации приложения и раскрытию конфиденциальной информации.</p>
65
<p>После завершения регистрации приложение сможет авторизовать пользователей и предоставлять доступ к защищённым ресурсам с помощью OAuth 2.0.</p>
65
<p>После завершения регистрации приложение сможет авторизовать пользователей и предоставлять доступ к защищённым ресурсам с помощью OAuth 2.0.</p>
66
<p>В OAuth 2.0 авторизация позволяет клиентскому приложению получить доступ к ресурсам пользователя без предоставления его учётных данных. Вместо этого используется система токенов для безопасного и контролируемого управления доступом.</p>
66
<p>В OAuth 2.0 авторизация позволяет клиентскому приложению получить доступ к ресурсам пользователя без предоставления его учётных данных. Вместо этого используется система токенов для безопасного и контролируемого управления доступом.</p>
67
<p>Есть два основных типа токенов:</p>
67
<p>Есть два основных типа токенов:</p>
68
-
<ul><li><strong>Токен доступа (access token).</strong>Этот токен выдаётся сервером авторизации и используется клиентом для доступа к ресурсам пользователя. Токен имеет ограниченный срок действия, что снижает риск злоупотребления в случае кражи. Если срок действия токена истекает, приложение может запросить новый токен, используя обновляющий токен.</li>
68
+
<ul><li><strong>Токен доступа (access token).</strong>Этот токен выдаётся сервером авторизации и используется клиентом для доступа к ресурсам пользователя. Токен имеет ограниченный срок действия, что снижает риск зл��употребления в случае кражи. Если срок действия токена истекает, приложение может запросить новый токен, используя обновляющий токен.</li>
69
<li><strong>Обновляющий токен (refresh token).</strong>Этот токен позволяет получать новый токен доступа без участия пользователя. Обновляющий токен обычно имеет более длительный срок действия и позволяет приложению автоматически обновлять доступ по мере необходимости.</li>
69
<li><strong>Обновляющий токен (refresh token).</strong>Этот токен позволяет получать новый токен доступа без участия пользователя. Обновляющий токен обычно имеет более длительный срок действия и позволяет приложению автоматически обновлять доступ по мере необходимости.</li>
70
</ul><p>Использование токенов в OAuth 2.0 снижает риски, связанные с хранением и передачей учётных данных. Пользователь или сервер могут отозвать токен в любое время, немедленно прерывая доступ к данным. Кроме того, приложение не хранит логин и пароль пользователя, что значительно снижает риск их утечки.</p>
70
</ul><p>Использование токенов в OAuth 2.0 снижает риски, связанные с хранением и передачей учётных данных. Пользователь или сервер могут отозвать токен в любое время, немедленно прерывая доступ к данным. Кроме того, приложение не хранит логин и пароль пользователя, что значительно снижает риск их утечки.</p>
71
<p>Клиентское приложение может получать токен доступа различными способами и управлять процессом авторизации с помощью потоков протокола OAuth 2.0. Эти потоки предназначены для разных сценариев, типов приложений и требований безопасности. Рассмотрим в общих чертах основные потоки и их предназначение.</p>
71
<p>Клиентское приложение может получать токен доступа различными способами и управлять процессом авторизации с помощью потоков протокола OAuth 2.0. Эти потоки предназначены для разных сценариев, типов приложений и требований безопасности. Рассмотрим в общих чертах основные потоки и их предназначение.</p>
72
<p><strong>Поток авторизационного кода</strong> - это наиболее распространённый и безопасный поток, используемый для серверных приложений. Он подходит для приложений, способных безопасно хранить секретные ключи, такие как client_secret. Процесс в этом потоке следующий:</p>
72
<p><strong>Поток авторизационного кода</strong> - это наиболее распространённый и безопасный поток, используемый для серверных приложений. Он подходит для приложений, способных безопасно хранить секретные ключи, такие как client_secret. Процесс в этом потоке следующий:</p>
73
<ul><li>пользователь перенаправляется на сервер авторизации, вводит учётные данные и соглашается предоставить доступ;</li>
73
<ul><li>пользователь перенаправляется на сервер авторизации, вводит учётные данные и соглашается предоставить доступ;</li>
74
<li>сервер возвращает авторизационный код клиентскому приложению;</li>
74
<li>сервер возвращает авторизационный код клиентскому приложению;</li>
75
<li>клиентское приложение отправляет код на сервер авторизации и получает токен.</li>
75
<li>клиентское приложение отправляет код на сервер авторизации и получает токен.</li>
76
</ul><p><strong>Упрощённый поток</strong>предназначен для одностраничных веб-приложений, где невозможно безопасно хранить секретный ключ. Этот поток быстрее, но менее безопасен, так как токен доступа передаётся через браузер и может быть уязвим для атак. Процесс в этом потоке:</p>
76
</ul><p><strong>Упрощённый поток</strong>предназначен для одностраничных веб-приложений, где невозможно безопасно хранить секретный ключ. Этот поток быстрее, но менее безопасен, так как токен доступа передаётся через браузер и может быть уязвим для атак. Процесс в этом потоке:</p>
77
<ul><li>пользователь перенаправляется на сервер авторизации, вводит учётные данные и соглашается предоставить доступ;</li>
77
<ul><li>пользователь перенаправляется на сервер авторизации, вводит учётные данные и соглашается предоставить доступ;</li>
78
<li>сервер сразу возвращает токен доступа в URL, добавляя его во фрагмент идентификатора после символа #. Это позволяет одностраничным приложениям получать токен напрямую, без обмена авторизационным кодом.</li>
78
<li>сервер сразу возвращает токен доступа в URL, добавляя его во фрагмент идентификатора после символа #. Это позволяет одностраничным приложениям получать токен напрямую, без обмена авторизационным кодом.</li>
79
</ul><p><strong>Поток пароля владельца ресурса</strong>используется, когда пользователь доверяет приложению и готов предоставить свои учётные данные напрямую. В этом потоке приложение получает токен доступа, отправив учётные данные пользователя на сервер авторизации:</p>
79
</ul><p><strong>Поток пароля владельца ресурса</strong>используется, когда пользователь доверяет приложению и готов предоставить свои учётные данные напрямую. В этом потоке приложение получает токен доступа, отправив учётные данные пользователя на сервер авторизации:</p>
80
<ul><li>пользователь вводит свои учётные данные непосредственно в приложении;</li>
80
<ul><li>пользователь вводит свои учётные данные непосредственно в приложении;</li>
81
<li>приложение отправляет эти данные на сервер авторизации;</li>
81
<li>приложение отправляет эти данные на сервер авторизации;</li>
82
<li>сервер проверяет данные и выдаёт токен.</li>
82
<li>сервер проверяет данные и выдаёт токен.</li>
83
</ul><p>Этот поток менее безопасен, так как приложение получает доступ к чувствительной информации. Его следует использовать только при высоком уровне доверия и отсутствии других методов авторизации.</p>
83
</ul><p>Этот поток менее безопасен, так как приложение получает доступ к чувствительной информации. Его следует использовать только при высоком уровне доверия и отсутствии других методов авторизации.</p>
84
<p><strong>Поток учётных данных клиента</strong>используется для авторизации приложений, действующих от своего имени, а не от имени пользователя. Этот поток подходит для серверных приложений и сценариев, где требуется доступ к API или сервисам без участия пользователя:</p>
84
<p><strong>Поток учётных данных клиента</strong>используется для авторизации приложений, действующих от своего имени, а не от имени пользователя. Этот поток подходит для серверных приложений и сценариев, где требуется доступ к API или сервисам без участия пользователя:</p>
85
<ul><li>приложение отправляет запрос на сервер авторизации с учётными данными клиента (client_id и client_secret);</li>
85
<ul><li>приложение отправляет запрос на сервер авторизации с учётными данными клиента (client_id и client_secret);</li>
86
<li>сервер проверяет данные и выдаёт токен доступа;</li>
86
<li>сервер проверяет данные и выдаёт токен доступа;</li>
87
<li>приложение использует токен для взаимодействия с ресурсами.</li>
87
<li>приложение использует токен для взаимодействия с ресурсами.</li>
88
</ul><p><strong>Поток авторизации устройства</strong>предназначен для устройств с ограниченными возможностями ввода, таких как телевизоры и игровые консоли. Процесс авторизации осуществляется с помощью другого устройства:</p>
88
</ul><p><strong>Поток авторизации устройства</strong>предназначен для устройств с ограниченными возможностями ввода, таких как телевизоры и игровые консоли. Процесс авторизации осуществляется с помощью другого устройства:</p>
89
<ul><li>устройство отображает код и URL для авторизации;</li>
89
<ul><li>устройство отображает код и URL для авторизации;</li>
90
<li>пользователь переходит по указанному URL на компьютере или смартфоне, вводит код и соглашается предоставить доступ;</li>
90
<li>пользователь переходит по указанному URL на компьютере или смартфоне, вводит код и соглашается предоставить доступ;</li>
91
<li>после подтверждения на другом устройстве основное устройство получает токен доступа.</li>
91
<li>после подтверждения на другом устройстве основное устройство получает токен доступа.</li>
92
</ul><p><strong>Поток обновления токена</strong>позволяет приложению получать новый токен доступа без повторной авторизации пользователя. Это упрощает доступ к ресурсам:</p>
92
</ul><p><strong>Поток обновления токена</strong>позволяет приложению получать новый токен доступа без повторной авторизации пользователя. Это упрощает доступ к ресурсам:</p>
93
<ul><li>приложение отправляет refresh token на сервер авторизации;</li>
93
<ul><li>приложение отправляет refresh token на сервер авторизации;</li>
94
<li>сервер проверяет refresh token и выдаёт новый токен.</li>
94
<li>сервер проверяет refresh token и выдаёт новый токен.</li>
95
</ul><p>Чтобы лучше понять работу потоков в OAuth 2.0, рекомендуем ознакомиться с <a>GIF-шпаргалкой</a>от сообщества DEV Community.</p>
95
</ul><p>Чтобы лучше понять работу потоков в OAuth 2.0, рекомендуем ознакомиться с <a>GIF-шпаргалкой</a>от сообщества DEV Community.</p>
96
Схема работы потока авторизационного кода<em>Изображение:<a>Hem</a>/<a>Dev</a></em><p>Для обеспечения надёжной защиты данных и минимизации рисков при использовании OAuth 2.0 важно следовать проверенным практикам безопасности. Далее мы рассмотрим основные из них.</p>
96
Схема работы потока авторизационного кода<em>Изображение:<a>Hem</a>/<a>Dev</a></em><p>Для обеспечения надёжной защиты данных и минимизации рисков при использовании OAuth 2.0 важно следовать проверенным практикам безопасности. Далее мы рассмотрим основные из них.</p>
97
<p><strong>Минимизация привилегий.</strong>Приложение должно запрашивать только те права доступа, которые необходимы для его работы. Это помогает ограничить потенциальный ущерб в случае утечки данных.</p>
97
<p><strong>Минимизация привилегий.</strong>Приложение должно запрашивать только те права доступа, которые необходимы для его работы. Это помогает ограничить потенциальный ущерб в случае утечки данных.</p>
98
<p><strong>Использование HTTPS.</strong>Все взаимодействия, связанные с передачей токенов и других чувствительных данных, должны происходить через защищённый протокол<a>HTTPS</a>. Это защищает данные от перехвата злоумышленниками.</p>
98
<p><strong>Использование HTTPS.</strong>Все взаимодействия, связанные с передачей токенов и других чувствительных данных, должны происходить через защищённый протокол<a>HTTPS</a>. Это защищает данные от перехвата злоумышленниками.</p>
99
При использовании протокола HTTPS данные сначала шифруются перед передачей, а затем расшифровываются на сервере<em>Иллюстрация: Polina Vari для Skillbox Media</em><p><strong>Ограничение времени действия токенов.</strong>Токены доступа должны иметь ограниченный срок действия, обычно от нескольких минут до нескольких часов, в зависимости от типа приложения и уровня безопасности. Для приложений с высокими требованиями к безопасности рекомендуется использовать короткий срок действия. Для критически важных операций, таких как изменения в аккаунте или доступ к финансовым данным, предпочтительны одноразовые токены, действующие менее минуты.</p>
99
При использовании протокола HTTPS данные сначала шифруются перед передачей, а затем расшифровываются на сервере<em>Иллюстрация: Polina Vari для Skillbox Media</em><p><strong>Ограничение времени действия токенов.</strong>Токены доступа должны иметь ограниченный срок действия, обычно от нескольких минут до нескольких часов, в зависимости от типа приложения и уровня безопасности. Для приложений с высокими требованиями к безопасности рекомендуется использовать короткий срок действия. Для критически важных операций, таких как изменения в аккаунте или доступ к финансовым данным, предпочтительны одноразовые токены, действующие менее минуты.</p>
100
<p><strong>Защита от повторного использования.</strong>Если токен использован, его следует немедленно аннулировать, чтобы предотвратить повторный доступ. Также важно регулярно обновлять токены, так как это сокращает время, в течение которого украденный токен может оставаться активным.</p>
100
<p><strong>Защита от повторного использования.</strong>Если токен использован, его следует немедленно аннулировать, чтобы предотвратить повторный доступ. Также важно регулярно обновлять токены, так как это сокращает время, в течение которого украденный токен может оставаться активным.</p>
101
<p><strong>Использование PKCE (Proof Key for Code Exchange).</strong>Это расширение для потока авторизационного кода, которое защищает от атак на этапе перехвата кода авторизации.<a>PKCE</a>добавляет дополнительный уровень безопасности, предотвращая несанкционированный доступ к токенам. Это особенно критично для мобильных и клиентских веб-приложений.</p>
101
<p><strong>Использование PKCE (Proof Key for Code Exchange).</strong>Это расширение для потока авторизационного кода, которое защищает от атак на этапе перехвата кода авторизации.<a>PKCE</a>добавляет дополнительный уровень безопасности, предотвращая несанкционированный доступ к токенам. Это особенно критично для мобильных и клиентских веб-приложений.</p>
102
<p><strong>Аутентификация клиента.</strong>Приложение должно пройти аутентификацию на сервере авторизации, предоставляя свои уникальные идентификаторы client_id и client_secret. Это помогает предотвратить использование протокола OAuth 2.0 неавторизованными приложениями.</p>
102
<p><strong>Аутентификация клиента.</strong>Приложение должно пройти аутентификацию на сервере авторизации, предоставляя свои уникальные идентификаторы client_id и client_secret. Это помогает предотвратить использование протокола OAuth 2.0 неавторизованными приложениями.</p>
103
<p><strong>Проверка и управление доступом.</strong>Приложение должно взаимодействовать только с надёжными серверами авторизации и ресурсными серверами. При обнаружении подозрительной активности пользователи должны получать уведомления и иметь возможность быстро заблокировать доступ.</p>
103
<p><strong>Проверка и управление доступом.</strong>Приложение должно взаимодействовать только с надёжными серверами авторизации и ресурсными серверами. При обнаружении подозрительной активности пользователи должны получать уведомления и иметь возможность быстро заблокировать доступ.</p>
104
<p>Вы ознакомились с возможностями и принципами работы протокола OAuth 2.0. Для углублённого изучения предлагаем следующие бесплатные ресурсы:</p>
104
<p>Вы ознакомились с возможностями и принципами работы протокола OAuth 2.0. Для углублённого изучения предлагаем следующие бесплатные ресурсы:</p>
105
<ul><li><a>OAuth 2.0 RFC 6749</a> - это официальная спецификация OAuth 2.0 от IETF. Документ содержит технические детали и полное описание всех аспектов протокола.</li>
105
<ul><li><a>OAuth 2.0 RFC 6749</a> - это официальная спецификация OAuth 2.0 от IETF. Документ содержит технические детали и полное описание всех аспектов протокола.</li>
106
<li><a>Учебник по OAuth 2.0 от команды Okta</a> - это подробное руководство, предлагающее более краткое и понятное объяснение по сравнению с официальной спецификацией. На сайте доступна платформа<a>OAuth 2.0 Playground</a>для практики с процессами авторизации и получения токенов.</li>
106
<li><a>Учебник по OAuth 2.0 от команды Okta</a> - это подробное руководство, предлагающее более краткое и понятное объяснение по сравнению с официальной спецификацией. На сайте доступна платформа<a>OAuth 2.0 Playground</a>для практики с процессами авторизации и получения токенов.</li>
107
<li><a>OAuth 2.0 Playground от Google</a> - это интерактивный тренажёр для практического изучения OAuth 2.0. Вы можете взаимодействовать с различными API, настраивать запросы и использовать токены доступа.</li>
107
<li><a>OAuth 2.0 Playground от Google</a> - это интерактивный тренажёр для практического изучения OAuth 2.0. Вы можете взаимодействовать с различными API, настраивать запросы и использовать токены доступа.</li>
108
<li><a>OAuth 2.0 и OpenID Connect</a> - это руководство для разработчиков от Google, объясняющее взаимодействие OAuth 2.0 и OpenID Connect. Содержит примеры кода и сценарии авторизации.</li>
108
<li><a>OAuth 2.0 и OpenID Connect</a> - это руководство для разработчиков от Google, объясняющее взаимодействие OAuth 2.0 и OpenID Connect. Содержит примеры кода и сценарии авторизации.</li>
109
<li><a>Блог разработчиков OAuth</a> - это сайт с множеством статей и видео, объясняющих использование OAuth 2.0 в различных приложениях.</li>
109
<li><a>Блог разработчиков OAuth</a> - это сайт с множеством статей и видео, объясняющих использование OAuth 2.0 в различных приложениях.</li>
110
</ul><p>Мы также рекомендуем<a>иллюстрированное руководство Дэвида Нила</a>, доступное в переводе на "<a>Хабре</a>". Эта небольшая статья будет полезна всем, кто только начинает знакомство с OAuth.</p>
110
</ul><p>Мы также рекомендуем<a>иллюстрированное руководство Дэвида Нила</a>, доступное в переводе на "<a>Хабре</a>". Эта небольшая статья будет полезна всем, кто только начинает знакомство с OAuth.</p>
111
<p>Кибербезопасность с нуля: взламываем и защищаем серверы за 5 дней</p>
111
<p>Кибербезопасность с нуля: взламываем и защищаем серверы за 5 дней</p>
112
<p>Погрузитесь в востребованную профессию специалиста по кибербезопасности. Научитесь защищать веб-серверы, перехватывать пароли, подделывать письма и обезвреживать вредоносное ПО.</p>
112
<p>Погрузитесь в востребованную профессию специалиста по кибербезопасности. Научитесь защищать веб-серверы, перехватывать пароли, подделывать письма и обезвреживать вредоносное ПО.</p>
113
<p><a>Пройти бесплатно</a></p>
113
<p><a>Пройти бесплатно</a></p>
114
<a>Курс: "Профессия Специалист по кибербезопасности + ИИ" Узнать больше</a>
114
<a>Курс: "Профессия Специалист по кибербезопасности + ИИ" Узнать больше</a>