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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fikiri_id_sdk-0.1.1.tar.gz.
File metadata
- Download URL: fikiri_id_sdk-0.1.1.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
af2e04ede982d64300ce3e44ca9ecd79f81b3c474abf808673239937fbb8ae2d
|
|
| MD5 |
16a9b2ccfe17aa5555009e774740dad8
|
|
| BLAKE2b-256 |
941cfe38d065d4992be509f7bfc7b8900cc838b48b865f9f569a7ef89e7d5694
|
File details
Details for the file fikiri_id_sdk-0.1.1-py3-none-any.whl.
File metadata
- Download URL: fikiri_id_sdk-0.1.1-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad8f165660d65f18f9cf8d8cff091928b429308812375e5e13b8ae354682598e
|
|
| MD5 |
882b19ba004b72cced335200ea15c8d6
|
|
| BLAKE2b-256 |
52f07fbec36825913159a12902f44edc043fc6afde9b1c05cee707e36b323ea0
|