Авторизация oAuth

Используется Django OAuth Toolkit Документация: https://django-oauth-toolkit.readthedocs.io/en/latest/index.html

Зарегестрировать новое приложение: http://127.0.0.1:8000/o/applications/register/ https://t34.universo.pro/o/applications/register/

Сохраняем себе ID и SECRET

ID: LjfmJBLB6g1E0kknNJaeAEMGLXO73gVqmNDdGa
SECRET: I9nEhQBhqFRjjlyd14HhLlCFhh5JfgLnNtkqgF1rAPdikfNkW73PhdOrrHcTs7SvpmVDV0c8p1XsZXMNKmmqx0TFB5RqbtTwTIFVw8lCuoj8KLfc1hIuHL1zSuUjEJ

Устанавливаем обратный адрес (куда вернётся пользователь после ввода пароля/логина) http://t34.universo.pro/noexist/callback Расчитать код проверки: для расчёта на python:

import random
import string
import base64
import hashlib

code_verifier = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(random.randint(43, 128)))
code_verifier = base64.urlsafe_b64encode(code_verifier.encode('utf-8'))

code_challenge = hashlib.sha256(code_verifier).digest()
code_challenge = base64.urlsafe_b64encode(code_challenge).decode('utf-8').replace('=', '')

print(code_verifier)
print(code_challenge)

code_challenge == RPoJ4cZKG8-gCSonREUH8Lq3mK7HlBWPiL2_Zg1GMD0
CODE_VERIFIER=RkVBQTFZQ0s4VFNPUTI3RUxYRk5FTzVNMERCNDhDRUczTjhURDJaVjU1MERXT0tLT0ZBSE9CS01LVTI4NjRISkg3UktMN1VYU1hVNU1JQUtFUVI1QUpZRUgySQ==

Ссылка для получения разрешения пользователю:

https://t34.universo.pro/o/authorize/?response_type=code&code_challenge=RPoJ4cZKG8-gCSonREUH8Lq3mK7HlBWPiL2_Zg1GMD0&code_challenge_method=S256&client_id=LjfmJBLB6g1E0kknNJaeAEMGLXO73gVqmNDYadGa&redirect_uri=http://t34.universo.pro/noexist/callback

В перенаправлении будет получен code:

https://t34.universo.pro/noexist/callback?code=w3XZ1J1LYoBoGQHhMWROImeu54yvOi

Запрашиваем токен пользователя у сервера:

curl -X POST -H "Cache-Control: no-cache" -H "Content-Type: application/x-www-form-urlencoded" "https://t34.universo.pro/o/token/" -d "client_id=${ID}" -d "client_secret=${SECRET}" -d "code=${CODE}" -d "code_verifier=${CODE_VERIFIER}" -d "redirect_uri=http://t34.universo.pro/noexist/callback" -d "grant_type=authorization_code"

В ответ получаем JSON:

{"access_token": "Ix6W1RfItpWCVUso6fsoEfwf718R2q", "expires_in": 36000, "token_type": "Bearer", "scope": "read write", "refresh_token": "QWAlyKL4B7vXWOJNG9WZEo0dIrjsPk"}

Теперь можем запрашивать данные: В заголовке запроса:

Content-Type
application/json
Authorization
Bearer Ix6W1RfItpWCVUso6fsoEfwf718R2q

Отправляем наш обычный JSON POST запросом по протоколу https к https://t34.universo.pro/api/v1.1/jwt/

Как пример приводим запрос на данные пользователя:

query {
uzantoj {
    edges {
    node {
        objId
    }
    }
    }
}