Skip to main content

oauth2.0 stlock

Project description

Библиотека для сервиса авторизации STLock (powered by SmartTechnoLab)

Статус: В разработке

Библиотека Python STLock

Быстрый старт

Пример с библиотекой FastAPI

pip install stlock
pip install fastapi
pip install uvicorn

main.py:

from fastapi import FastAPI, HTTPException, Body, Query
from stlock import AuthClient

# создание экземпляра класса
AC = AuthClient(
    client_id="client",  # id клиента
    client_secret="secret",  # secret клиента
    code_redirect_uri="http://localhost:8000/code",  # ссылка перенаправления запроса с кодом
    service_endpoint="https://bbac70hrtmfdqn5drnga.containers.yandexcloud.net",  # ссылка на сервис авторизации
)

# service_endpoint="https://bba6q6chdp0eatf6n0ms.containers.yandexcloud.net"
# dev версия проекта, очищается каждые 24 часа

app = FastAPI()


# Регистрация пользователя
@app.post("/register", status_code=201)
def register_user(username=Body(...), password=Body(...)):
   data, status_code = AC.register(username, password)
   if status_code >= 400:
       raise HTTPException(status_code, data["detail"])
   return data


# Авторизация пользователя, редирект на http://localhost:8000/code
@app.post('/login')
def login(username: str = Body(...), password: str = Body(...)):
   data, status_code = AC.authorize_user(username, password)
   if status_code >= 400:
       raise HTTPException(status_code, data["detail"])
   return data


# Получение кода после редиректа, заполняется в code_redirect_uri
@app.get('/code')
def getcode(code=Query(None)):
   data, status_code = AC.get_tokens(code)
   if status_code >= 400:
       raise HTTPException(status_code, data["detail"])
   return data


# Обмен refresh токена но новые refresh и access токены
@app.post("/refresh")
def do_refresh_token(refresh_token=Body(...)):
    data, status_code = AC.do_refresh(refresh_token['refresh_token'])
    print(data, status_code)
    if status_code >= 400:
        raise HTTPException(status_code, data["detail"])
    return data


# Получение информации из токена
@app.get("/user")
def get_user_info(token: str = Query(...)):
    user_data = AC.decode(token)
    return user_data

Для запуска сервера:

uvicorn main:app

Описание методов:

AC.register(username, password)

Создаёт нового пользователя в базе данных

AC.authorize_user(username, password)

Авторизирует запрос на логин пользователя, перенаправляет на страницу с кодом в query запросе

AC.get_tokens(code)

Выдаёт токены пользователя (access, refresh)

AC.decode(token)

Декодирует токен, возвращает словарь с данными о пользователе

AC.do_refresh(token)

Обменивает refresh token на новый access и refresh токены

примеры запросов :

создание пользователя:

Input:

POST http://localhost:8000/register
Body {
    "username": "user1",
    "password": "Password123!"
}

Output:

{
    "detail": "User registred"
}

авторизация пользователя:

Input:

POST http://localhost:8000/login
Body {
    "username": "user1",
    "password": "Password123!"
}

Output:

{
    "access_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJjbGllbnQiLCJleHAiOjE2ODQ4NTgzNzgsInN1YiI6ImQ5YjBmYjE1LWJjYmQtNDNkNy1hMDdlLTAxNTIwMjBlZWI2ZiIsInJvbGUiOiJUZXN0In0.5_CHG7IR0DDulJcaPF8owduWsVsI2a5Vvbx-gyG_Xi2JIs9tpaPfJircy8WZXkeZ_3Mk8tAuvaxhTn7ytWXtdA",
    "expires_in": 60,
    "refresh_token": "MJFMYZGWNWQTNDA5MI01NTU0LTHIMMYTYTI4MJM0MTZKMJHM",
    "token_type": "Bearer"
}

Информация о пользователе:

Input:

GET http://localhost:8000/user?token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJjbGllbnQiLCJleHAiOjE2ODQ4NTgzNzgsInN1YiI6ImQ5YjBmYjE1LWJjYmQtNDNkNy1hMDdlLTAxNTIwMjBlZWI2ZiIsInJvbGUiOiJUZXN0In0.5_CHG7IR0DDulJcaPF8owduWsVsI2a5Vvbx-gyG_Xi2JIs9tpaPfJircy8WZXkeZ_3Mk8tAuvaxhTn7ytWXtdA

Output:

{
    "aud": "client",
    "exp": 1684858378,
    "sub": "d9b0fb15-bcbd-43d7-a07e-0152020eeb6f",
    "role": "Test"
}

Обновление токена:

Input:

POST http://localhost:8000/refresh
Body {
    "refresh_token": "MJFMYZGWNWQTNDA5MI01NTU0LTHIMMYTYTI4MJM0MTZKMJHM"
}

Output:

{
    "access_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJjbGllbnQiLCJleHAiOjE2ODQ4NTg0MzgsInN1YiI6ImQ5YjBmYjE1LWJjYmQtNDNkNy1hMDdlLTAxNTIwMjBlZWI2ZiIsInJvbGUiOiJUZXN0In0.5hFJg-U6i9E9GFp0Gxsn9ME3Dy-JtqKEyZotHT7WmnAsdZeLrDBjDU20ttb5f5HMLep8SWruTOoWjlfiZuGBKg",
    "expires_in": 60,
    "refresh_token": "NTC1ZDY5YJYTZTC0MC01ZJRMLTHJZTUTY2E1MMFJMTAZNZI0",
    "token_type": "Bearer"
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

stlock-0.0.7.5.tar.gz (3.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

stlock-0.0.7.5-py3-none-any.whl (4.4 kB view details)

Uploaded Python 3

File details

Details for the file stlock-0.0.7.5.tar.gz.

File metadata

  • Download URL: stlock-0.0.7.5.tar.gz
  • Upload date:
  • Size: 3.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for stlock-0.0.7.5.tar.gz
Algorithm Hash digest
SHA256 cf43ca59ff36bf4b38e8a4a95963b35dc129cbac0215cc0a824ec35971206403
MD5 6884150ba6745c548700718d3e2d0b27
BLAKE2b-256 e8487432589f1066247ac9e50522ea3b8445f727f8eafe9d14467708edebec17

See more details on using hashes here.

File details

Details for the file stlock-0.0.7.5-py3-none-any.whl.

File metadata

  • Download URL: stlock-0.0.7.5-py3-none-any.whl
  • Upload date:
  • Size: 4.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.0rc2

File hashes

Hashes for stlock-0.0.7.5-py3-none-any.whl
Algorithm Hash digest
SHA256 6b69eae9aa3d950cf53eedb852c7823968c5b63cfdd260ace0591b0dea4f290d
MD5 a800361df28f0e31c2c9fd8d645d85df
BLAKE2b-256 0171e371877cbbb900df53e08692ca913c56eee6518d2932ca849b0ab1bde151

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page