Youtube-запись от 2026-02-27: https://youtu.be/FeAi2kqFKAk
Warning
Хватит делать метеостанции Пора ходить в Интернет за своими данными
flowchart LR
app(приложение):::green
server(сервер):::red
app ==> |Слышь, дай данные?| server
server ==> |На!| app
classDef red fill:#D65D0E,stroke:#D65D0E,color:#F6F0D8;
classDef green fill:#9A9A00,stroke:#9A9A00,color:#F6F0D8;
sequenceDiagram
participant app
participant server
app ->> server: Я от Васи. Дай данные?
activate server
Note right of server: читает записку от Васи
server ->> app: На!
deactivate server
sequenceDiagram
participant app
participant server
app ->> server: Я от Васи. Дай данные?
activate server
Note right of server: читает записку от Васи
alt грамота ОК
server -->> app: 🙂 На!
else что-то не так
server -->> app: 👹 Не положено
end
deactivate server
- Где взять верительную грамоту простому рабочему
парнюприложению с окраины?- Честно получить у Васи.
- Сфабриковать из подручных материалов.
- Украсть.
- Откуда мне знать, что грамота от Васи?
- Я что, всех Вась должен помнить?
- Мало ли что Вася им понаразрешал пять лет назад…
- Вот пустишь их в сарай переночевать, а они корову уведут.
- Почему вообще я?!
Tip
Ааааа, милицияааааа!!!
- Я буду за вас проверять документы.
- И выдавать тоже.
- И знать, кому что положено, буду тоже я.
- С владельцем данных я тоже договорюсь.
- Защита от злодеев — моё дело, не беспокойтесь.
- И всем придётся общаться по моим правилам.
sequenceDiagram
participant app
participant server
participant auth
participant owner
[!INFO] Четыре — это уже много
- Это интроверты, не надо их сразу мучительно нетворкать
- У всех свои дела, особенно у владельца
- Злодеи так и рыщут, надо осторожней
Note
Проблеме не первое столетие Задолго до компьютеров были: общие знакомые — верительные грамоты — подорожные — доверенности — векселя — ордера — мандаты — паспорта — визы — пропуска — талоны — …
- Вольный перевод спецификации Device Authorisation Grant
- Как эту пьесу ставит Google: OAuth 2.0 для телевизоров и приложений с ограниченным вводом данных
sequenceDiagram
autonumber
participant 🐱
participant 😈
participant 🐰
🐱 ->> +😈: Это 🐱, я от 🐰! Дай 🔖 талончик, мне на сервер надо
Note right of 😈: …знаю я этого 🐱,<br/>сам он с 🐰 не разберётся,<br/>придётся мне самому
😈 -->> 🐱: Пусть 🐰 ко мне зайдёт, вот 🍀 пропуск
activate 😈
🐱 ->> +🐰: Сходи к 😈, ладно? Вот 🍀 пропуск
Note right of 🐰: Да где мой<br/>телефон-то…
loop 🐱 дёргает 😈
🐱 ->> 😈: Ну чего, 🐰 дошёл? Разрешил?
end
🐰 -->> -😈: Это 🐰, вот мой 🍀 пропуск. И вот что 🐱 можно
deactivate 😈
😈 -->> -🐱: 🐰 разрешил наконец, вот твой 🔖 талончик на разное
sequenceDiagram
autonumber
participant 🐱
participant 👻
participant 😈
🐱 ->> +👻: Это 🐱, вот мой 🔖, хочу 🍏
👻 ->> +😈: Пришёл тут один, показал 🔖, просит 🍏 — можно?
😈 -->> -👻: Да
👻 -->> -🐱: Вот тебе 🍏
Диктатушки-диктата, мы играем за 🐱 кота app
POST-запрос на параметры авторизации силами клиента — серверу авторизации.
URL: https://oauth2.googleapis.com/device/code
Параметры: client_id — scope
client_id берём из переменной среды GOOGLE_CLIENT_ID
- CURLOPT_POST — включаем протокол POST
- CURLOPT_POSTFIELDS — это если хотим что-то послать
tail -4 params.txt — посмотрим на хвост ответа (ключ не увидим)
[!CAUTION] Складывать ключ в незашифрованный файл — плохая идея Разговор о том, куда его девать после получения — впереди
Возвращается всегда JSON
- Выберем JSON-библиотеку из целого мешка
- Прочтём файл и покажем из него то, что нужно показать
- В цикле POST-запрос уже на токен — серверу авторизации
- И дальше GET-запросы серверу ресурсов — с ключом в заголовке и параметрами собственно запроса
curl_slist— тип списка- curl_slist_append() — добавляем заголовок в список
- CURLOPT_HTTPHEADER — сюда кидаем список заголовков
[!INFO] Пригодятся для Google и не только