Аутентификация¶
Содержание
Шаги аутентификации¶
Для аутентификации используется OpenAuth DeviceFlow https://tools.ietf.org/html/draft-ietf-oauth-v2-05#section-3.7 Для получения client_id и client_secret пишите на support@kino.pub После получения access_token желательно сразу отсылать запрос на /device/notify
- Шаги аутентификации:
Получение device_code
Ожидание подтверждения
Получения access token
Получение device_code¶
Получение device code:
POST https://api.service-kp.com/oauth2/device?grant_type=device_code&client_id=myclient&client_secret=mysecret
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
'code': 'ab23lcdefg340g0jgfgji45jb', //код, для дальнейшего получения access token'a
'user_code': 'ASDFGH', //Код который нужно показать пользователю
'verification_uri': 'https://kino.pub/device', //URL где нужно ввести пользовательский код
'expires_in': 8600, //Через сколько данный device_code
'interval': 5 // Интервал в секундах, через который посылать запросы на проверку активации
}
Ожидание подтверждения¶
После получения device_code требуется запрашивать подтверждение активации, не чаще чем каждые N секунд (поле interval из первого запроса) Пример:
POST https://api.service-kp.com/oauth2/device?grant_type=device_token&client_id=myclient&client_secret=mysecret&code='abcdefg'
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
{
"error":"authorization_pending"
}
Если вернулся ответ с HTTP статусом 200, значит клиент активировал устройство, аутентификация прошла успешно. Смотрите Получение access_token
Получение access_token¶
После получения access_token можно смело пользоваться API
Пример:
POST https://api.service-kp.com/oauth2/device?grant_type=device_token&client_id=myclient&client_secret=mysecret&code='abcdefg'
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
'access_token': 'asdfghjkl123456789', // токен, который требуется для обращения к API
'token_type': 'bearer',
'expires_in': 3600,
'refresh_token': 'qwertyu12345678' // токен, с помощью которого можно получать access_token без получения device_code
'scope': null // пока не используем
}
Обновление access_token¶
Если срок действия access_token подходит к концу его можно обновить при помощи refresh_token, который валиден 30 дней. После обновления все старые токены становятся недействительными.
Пример:
POST https://api.service-kp.com/oauth2/token?grant_type=refresh_token&client_id=myclient&client_secret=mysecret&refresh_token='qwertyu12345678'
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
'access_token': 'asdfghjkl123456789', // Новый access_token
'token_type': 'bearer',
'expires_in': 3600,
'refresh_token': 'qwertyu12345678' // Новый refresh_token,
}
Ошибки¶
Все ошибки, кроме “error”:”authorization_pending” являются критичными и свидетельствуют о каких-либо неполадках.
Пример:
POST https://api.service-kp.com/oauth2/device?grant_type=device_code&client_id=wrongclient&client_secret=mysecret
HTTP/1.1 400 Bad Request
Content-Type: application/json
Cache-Control: no-store
{
"error":"invalid_client",
"error_description":"The client credentials are invalid"
}