Skip to main content

Python auth lib for https://iam.stlcode.ru service

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(
    endpoint="https://d5du1ra5pgq6gr2ba1jc.apigw.yandexcloud.net/",
    user_pool_id="USER_POOL_ID",
    owner_id="OWNER_ID",
    api_key="API_KEY"
)
app = FastAPI()


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


# Авторизация пользователя
@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)
   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'])
    if status_code >= 400:
        raise HTTPException(status_code, data)
    return data


# Отозвать refresh token для выхода из аккаунта
@app.post("/logout")
def do_refresh_token(refresh_token=Body(...)):
    data, status_code = AC.unauthorized(refresh_token['refresh_token'])
    if status_code >= 400:
        raise HTTPException(status_code, data)
    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, email, phone, password)

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

AC.authorize_user(username, password)

Авторизирует запрос на логин пользователя, выдаёт access & refresh токены

AC.decode(access_token)

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

AC.do_refresh(refresh_token)

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

AC.unauthorized(refresh_token)

Отзывает refresh_token

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

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

Input:

POST http://localhost:8000/register
Body {
    "username": "test",
    "email": "test@gmail.com",
    "phone": "79111111111",
    "password": "test"
}

Output:

{
    "policy_ids": [],
    "user_pool_id": "0e2173b5-b55f-4ea4-bec5-450e2c12a458",
    "owner_id": "b3893a06-5931-4160-9e62-938ab173b6c8",
    "username": "test6",
    "email": "test6@gmail.com",
    "phone": "79520546024",
    "id": "a351d4db-4e7f-48ef-b667-e7af3a480086",
    "status": "ACTIVE",
    "creation_timestamp": 1693303651
}

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

Input:

POST http://localhost:8000/login
Body {
    "username": "test",
    "password": "test"
}

Output:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI3YWZkYjM5Yi0zZDZmLTQyZTMtODU1NS02NjE2OGRjYTczNDAiLCJleHAiOjE2OTMzMDQzMDEsImlhdCI6MTY5MzMwMzcwMSwidHlwZSI6IkFDQ0VTUyIsImF1ZCI6IlVTRVIiLCJzdWIiOiI1ZjMzMTE1MS00OWQxLTRkMTItYTk3Ny1hOTRhMjIzYTk0OGEiLCJvd25lcl9zdWIiOiJiMzg5M2EwNi01OTMxLTQxNjAtOWU2Mi05MzhhYjE3M2I2YzgiLCJ1c2VyX3Bvb2xfc3ViIjoiMGUyMTczYjUtYjU1Zi00ZWE0LWJlYzUtNDUwZTJjMTJhNDU4In0.gsVRcQ0R_tlL_s1aHz71YilLEuEH7Gyn3BgY6a4acgc",
    "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJhZTBjZWYwYS02MzU0LTRlYjYtODQwNi04NDY2NjE4ZGM1MDMiLCJleHAiOjE2OTMzMDczMDEsImlhdCI6MTY5MzMwMzcwMSwidHlwZSI6IlJFRlJFU0giLCJhdWQiOiJVU0VSIiwic3ViIjoiNWYzMzExNTEtNDlkMS00ZDEyLWE5NzctYTk0YTIyM2E5NDhhIiwib3duZXJfc3ViIjoiYjM4OTNhMDYtNTkzMS00MTYwLTllNjItOTM4YWIxNzNiNmM4IiwidXNlcl9wb29sX3N1YiI6IjBlMjE3M2I1LWI1NWYtNGVhNC1iZWM1LTQ1MGUyYzEyYTQ1OCJ9.MufGATyo2Co9evSRXd0yPTEhsLgYdb5r4qOUrsMwWmw"
}

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

Input:

POST http://localhost:8000/refresh
Body {
    "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI0MjRhYjhlMy0zMzA3LTQ0MjgtODY0Ny1iNjQzMTYwZjQxMjciLCJleHAiOjE2OTMzMDc0NDYsImlhdCI6MTY5MzMwMzg0NiwidHlwZSI6IlJFRlJFU0giLCJhdWQiOiJVU0VSIiwic3ViIjoiY2Y3ZmRmYzYtYTU0ZC00MDFlLWIxYTUtMGFiYmFkMWNjNjQzIiwib3duZXJfc3ViIjoiYjM4OTNhMDYtNTkzMS00MTYwLTllNjItOTM4YWIxNzNiNmM4IiwidXNlcl9wb29sX3N1YiI6IjBlMjE3M2I1LWI1NWYtNGVhNC1iZWM1LTQ1MGUyYzEyYTQ1OCJ9.KMHpDmVTJWsaY4L1Z6DwtiSapSNOKvRqr-4omb_96Fk"
}

Output:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJiYjZjNmEzMC05Y2Y2LTQwNTEtODc5Yi1kMjU1YTQ2MjkxZDIiLCJleHAiOjE2OTMzMDQ0NTksImlhdCI6MTY5MzMwMzg1OSwidHlwZSI6IkFDQ0VTUyIsImF1ZCI6IlVTRVIiLCJzdWIiOiJjZjdmZGZjNi1hNTRkLTQwMWUtYjFhNS0wYWJiYWQxY2M2NDMiLCJvd25lcl9zdWIiOiJiMzg5M2EwNi01OTMxLTQxNjAtOWU2Mi05MzhhYjE3M2I2YzgiLCJ1c2VyX3Bvb2xfc3ViIjoiMGUyMTczYjUtYjU1Zi00ZWE0LWJlYzUtNDUwZTJjMTJhNDU4In0.GI_hkak_GhjdeSPH25K66fggB_QhNohyLQJ1PXoz3ag",
    "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIzNWJiOTVkNS0yOTFiLTQyNTQtOTU4Zi02NmE4YmQyY2NjZTEiLCJleHAiOjE2OTMzMDc0NTksImlhdCI6MTY5MzMwMzg1OSwidHlwZSI6IlJFRlJFU0giLCJhdWQiOiJVU0VSIiwic3ViIjoiY2Y3ZmRmYzYtYTU0ZC00MDFlLWIxYTUtMGFiYmFkMWNjNjQzIiwib3duZXJfc3ViIjoiYjM4OTNhMDYtNTkzMS00MTYwLTllNjItOTM4YWIxNzNiNmM4IiwidXNlcl9wb29sX3N1YiI6IjBlMjE3M2I1LWI1NWYtNGVhNC1iZWM1LTQ1MGUyYzEyYTQ1OCJ9.FfXom1owSaTjaFCBpj8nSZXK-d4MEetFpJCMvYQ44mQ"
}

Отзыв refresh токена:

Input:

POST http://localhost:8000/logout
Body {
    "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIzNWJiOTVkNS0yOTFiLTQyNTQtOTU4Zi02NmE4YmQyY2NjZTEiLCJleHAiOjE2OTMzMDc0NTksImlhdCI6MTY5MzMwMzg1OSwidHlwZSI6IlJFRlJFU0giLCJhdWQiOiJVU0VSIiwic3ViIjoiY2Y3ZmRmYzYtYTU0ZC00MDFlLWIxYTUtMGFiYmFkMWNjNjQzIiwib3duZXJfc3ViIjoiYjM4OTNhMDYtNTkzMS00MTYwLTllNjItOTM4YWIxNzNiNmM4IiwidXNlcl9wb29sX3N1YiI6IjBlMjE3M2I1LWI1NWYtNGVhNC1iZWM1LTQ1MGUyYzEyYTQ1OCJ9.FfXom1owSaTjaFCBpj8nSZXK-d4MEetFpJCMvYQ44mQ"
}

Output:

STATUS_CODE: 200

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.9.tar.gz (5.1 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.9-py3-none-any.whl (4.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: stlock-0.0.9.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.10.0rc2

File hashes

Hashes for stlock-0.0.9.tar.gz
Algorithm Hash digest
SHA256 5dcf5beb33e91edb13f8d741b8351eb5d2db96483bc5a6ad4f5e06c0571ccbcc
MD5 52a88cfd1c38aa7bdda1284c91374f19
BLAKE2b-256 ce8dbe81717fa30f1d496404b41fc10d548518bd188c183664d2a6bb00bf1281

See more details on using hashes here.

File details

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

File metadata

  • Download URL: stlock-0.0.9-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.9-py3-none-any.whl
Algorithm Hash digest
SHA256 47d3ee58773ac7259de2241cc197dabe1d524304d91f1a26f1bd4e1beb5160ff
MD5 116ce22b279db694bb0bd927c2428e9b
BLAKE2b-256 b01d7e30f0120a7a174ffa2c9ad25301fe2d6bee48bbafb7ef11fe7c733c43ac

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