Skip to main content

SDK officiel FikiriID — intégration SSO OIDC pour plateformes Python

Project description

fikiri-id-sdk

SDK officiel FikiriID pour Python. Intègre le flow OAuth2 Authorization Code + PKCE (RFC 7636) avec adaptateurs pour FastAPI et Django.

Installation

pip install fikiri-id-sdk
# Avec FastAPI :
pip install "fikiri-id-sdk[fastapi]"
# Avec Django :
pip install "fikiri-id-sdk[django]"

Usage de base

from fikiri_id_sdk import FikiriIDClient

with FikiriIDClient(
    base_url="http://77.42.72.129:8094",
    client_id="fikiri-AbCdEfGhIj",
    client_secret="votre_secret",
    redirect_uri="https://market.fikiri.cd/callback",
    scopes=["openid", "profile", "email", "kyc:status"],
) as client:
    # 1. Générer l'URL de redirection (stocker code_verifier en session)
    url, code_verifier = client.get_authorization_url(state="random-state")

    # 2. Sur la route /callback
    tokens = client.exchange_code(code="<code>", code_verifier=code_verifier)
    user = client.get_userinfo(tokens["access_token"])
    # → {"sub": "d569…", "fikiri_id": "06-002-1-1-1990-0042", "kyc_verified": True}

Intégration FastAPI

from fastapi import FastAPI, Depends
from fikiri_id_sdk import FikiriIDClient
from fikiri_id_sdk.fastapi import make_require_user, make_require_kyc

app = FastAPI()

fikiri = FikiriIDClient(
    base_url="http://77.42.72.129:8094",
    client_id="fikiri-AbCdEfGhIj",
    client_secret="votre_secret",
    redirect_uri="https://market.fikiri.cd/callback",
)

require_user = make_require_user(fikiri)
require_kyc  = make_require_kyc(fikiri, min_level="verifie")

@app.get("/me")
def me(user=Depends(require_user)):
    return {"fikiri_id": user["fikiri_id"], "name": user["name"]}

@app.post("/transfert")
def transfert(user=Depends(require_kyc)):
    # Accessible uniquement aux utilisateurs KYC vérifié
    return {"ok": True}

# Callback OAuth
@app.get("/callback")
def callback(code: str, state: str, request: Request):
    code_verifier = request.session["code_verifier"]
    tokens = fikiri.exchange_code(code=code, code_verifier=code_verifier)
    return {"access_token": tokens["access_token"]}

Intégration Django

# settings.py
from fikiri_id_sdk import FikiriIDClient

FIKIRI_ID_CLIENT = FikiriIDClient(
    base_url="http://77.42.72.129:8094",
    client_id="fikiri-AbCdEfGhIj",
    client_secret="votre_secret",
    redirect_uri="https://market.fikiri.cd/callback",
)

MIDDLEWARE = [
    ...
    "fikiri_id_sdk.django.FikiriIDMiddleware",
]
# views.py
from django.http import JsonResponse
from fikiri_id_sdk.django import fikiri_login_required

@fikiri_login_required
def profil(request):
    user = request.fikiri_user   # dict introspect — jamais None ici
    return JsonResponse({"fikiri_id": user["fikiri_id"]})

def publique(request):
    user = getattr(request, "fikiri_user", None)  # peut être None
    return JsonResponse({"connecte": user is not None})

Client async (FastAPI / asyncio)

from fikiri_id_sdk import FikiriIDAsyncClient

async with FikiriIDAsyncClient(
    base_url="http://77.42.72.129:8094",
    client_id="fikiri-AbCdEfGhIj",
    client_secret="votre_secret",
    redirect_uri="https://market.fikiri.cd/callback",
) as client:
    tokens = await client.exchange_code(code, code_verifier)
    user   = await client.get_userinfo(tokens["access_token"])
    info   = await client.introspect(tokens["access_token"])

Méthodes disponibles

FikiriIDClient (sync) / FikiriIDAsyncClient (async)

Méthode Description
get_authorization_url(state) Retourne (url, code_verifier) — stocker le verifier en session
exchange_code(code, code_verifier) Échange le code → access_token + refresh_token
get_userinfo(access_token) Profil complet selon les scopes accordés
introspect(token) Validation middleware RFC 7662 — {"active": true/false, ...}
refresh_access_token(refresh_token) Renouvelle l'access token
revoke_token(token) Révoque access ou refresh token à la déconnexion
get_discovery() Configuration OIDC /.well-known/openid-configuration

make_require_user(client) (FastAPI)

Retourne une dépendance FastAPI qui valide le Bearer token et injecte le profil.

make_require_kyc(client, min_level) (FastAPI)

Variante avec vérification du niveau KYC ('en_cours' ou 'verifie').

FikiriIDMiddleware (Django)

Injecte request.fikiri_user (dict introspect ou None) sur toutes les requêtes.

fikiri_login_required (Django)

Décorateur de vue — retourne 401 JSON si request.fikiri_user est None.


Serveur live : http://77.42.72.129:8094 · Swagger UI · Guide d'intégration

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

fikiri_id_sdk-0.1.0.tar.gz (9.9 kB view details)

Uploaded Source

Built Distribution

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

fikiri_id_sdk-0.1.0-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file fikiri_id_sdk-0.1.0.tar.gz.

File metadata

  • Download URL: fikiri_id_sdk-0.1.0.tar.gz
  • Upload date:
  • Size: 9.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for fikiri_id_sdk-0.1.0.tar.gz
Algorithm Hash digest
SHA256 aa1988dd132811eabc1d838f8d21111d872294d558808a6d841c17440c58662a
MD5 4f2cec7075a2910cff486d1d79e82e28
BLAKE2b-256 e2acc12d0400914eef7e944dfe08d8b4f455fa35715054049fe4d956410e96be

See more details on using hashes here.

File details

Details for the file fikiri_id_sdk-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: fikiri_id_sdk-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for fikiri_id_sdk-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7dff5d9b49664393c8e3c5b5e269b99a0aa05a949d12a4b2af849227e4915e93
MD5 8150e71389ffd75a15b503b85863d7b2
BLAKE2b-256 9b609b73206fcf398f7c3f97a73a1b5fa7bca0d1591befd1c3633cbe9ac4f5f1

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