Підключіть надійну біометричну автентифікацію (Passkeys / КЕП) до свого веб-сайту чи застосунку за 5 хвилин. Працює як передові системи суверенної цифрової ідентифікації — безпечно, безшовно, за стандартом OIDC.
REANE ID є стандартним постачальником ідентифікації OpenID Connect (IdP). Інтеграція підтримує будь-яку стандартну OIDC бібліотеку.
Отримайте client_id та вкажіть ваш redirect_uri в панелі керування REANE Trust.
Розмістіть фірмову кнопку входу, яка перенаправляє на наш шлюз /oauth/authorize з потрібними параметрами.
Коли користувач підтвердить особу на телефоні, наш шлюз поверне одноразовий code на ваш сайт для отримання токенів.
Використовуйте ці адреси для налаштування стандартних OIDC/OAuth 2.1 клієнтів:
| OpenID Discovery | https://id.reane.com.ua/.well-known/openid-configuration | |
| Authorization URL | https://id.reane.com.ua/oauth/authorize | |
| Token URL (POST) | https://id.reane.com.ua/oauth/v2/token | |
| UserInfo URL (GET) | https://id.reane.com.ua/oauth/v2/userinfo | |
| JWKS Keys (RS256) | https://id.reane.com.ua/oauth/v2/jwks.json |
// Node.js Express OAuth 2.1 Implementation
const express = require('express');
const axios = require('axios');
const app = express();
const CLIENT_ID = 'your_client_id';
const CLIENT_SECRET = 'your_client_secret';
const REDIRECT_URI = 'https://your-site.com/auth/callback';
// 1. Redirect to REANE ID Gateway
app.get('/login/reane', (req, res) => {
const authUrl = `https://id.reane.com.ua/oauth/authorize?client_id=${CLIENT_ID}&redirect_uri=${encodeURIComponent(REDIRECT_URI)}&response_type=code&state=xyz123`;
res.redirect(authUrl);
});
// 2. Handle OIDC Callback from REANE ID
app.get('/auth/callback', async (req, res) => {
const { code } = req.query;
// Exchange single-use code for RS256 Token Bundle
const tokenResp = await axios.post('https://id.reane.com.ua/oauth/v2/token', {
grant_type: 'authorization_code',
code: code,
client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
redirect_uri: REDIRECT_URI
});
const { access_token } = tokenResp.data;
// Retrieve verified resident profile
const userResp = await axios.get('https://id.reane.com.ua/oauth/v2/userinfo', {
headers: { Authorization: `Bearer ${access_token}` }
});
console.log("Verified Resident:", userResp.data);
// userResp.data contains: { sub, name, email, tax_id, reane_kyc_status }
res.send(`Вітаємо, ${userResp.data.name}! Ви успішно увійшли через REANE ID.`);
});
app.listen(3000, () => console.log('Listening on http://localhost:3000'));
# Python FastAPI Implementation
import requests
from fastapi import FastAPI, Request
from fastapi.responses import RedirectResponse
app = FastAPI()
CLIENT_ID = "your_client_id"
CLIENT_SECRET = "your_client_secret"
REDIRECT_URI = "https://your-site.com/auth/callback"
@app.get("/login")
def login():
gateway_url = f"https://id.reane.com.ua/oauth/authorize?client_id={CLIENT_ID}&redirect_uri={REDIRECT_URI}&response_type=code&state=secure_state"
return RedirectResponse(gateway_url)
@app.get("/auth/callback")
def callback(code: str, state: str):
# Exchange single-use authorization code
token_resp = requests.post("https://id.reane.com.ua/oauth/v2/token", json={
"grant_type": "authorization_code",
"code": code,
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
"redirect_uri": REDIRECT_URI
}).json()
# Fetch resident claims
userinfo = requests.get("https://id.reane.com.ua/oauth/v2/userinfo", headers={
"Authorization": f"Bearer {token_resp['access_token']}"
}).json()
return {
"status": "AUTHENTICATED",
"resident_name": userinfo.get("name"),
"tax_id": userinfo.get("tax_id"),
"email": userinfo.get("email"),
"kyc_status": userinfo.get("reane_kyc_status")
}
<?php
// PHP OAuth 2.1 Callback Handler
$clientId = 'your_client_id';
$clientSecret = 'your_client_secret';
$code = $_GET['code'] ?? null;
if (!$code) {
// Redirect to REANE ID Gateway
$authUrl = "https://id.reane.com.ua/oauth/authorize?client_id={$clientId}&redirect_uri=" . urlencode("https://your-site.com/callback.php") . "&response_type=code";
header("Location: $authUrl");
exit;
}
// Exchange Code for Access Token
$ch = curl_init('https://id.reane.com.ua/oauth/v2/token');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
'grant_type' => 'authorization_code',
'code' => $code,
'client_id' => $clientId,
'client_secret' => $clientSecret
]));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$tokens = json_decode(curl_exec($ch), true);
curl_close($ch);
// Fetch User Profile
$ch2 = curl_init('https://id.reane.com.ua/oauth/v2/userinfo');
curl_setopt($ch2, CURLOPT_HTTPHEADER, ["Authorization: Bearer {$tokens['access_token']}"]);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
$resident = json_decode(curl_exec($ch2), true);
curl_close($ch2);
echo "Вітаємо, " . htmlspecialchars($resident['name']) . "! РНОКПП: " . htmlspecialchars($resident['tax_id']);
?>
<!-- Фірмова кнопка входу через REANE ID -->
<a href="https://id.reane.com.ua/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_CALLBACK_URL&response_type=code"
style="display: inline-flex; align-items: center; gap: 10px; background: #0e131f; color: #fff; border: 1px solid rgba(0,229,255,0.4); border-radius: 50px; padding: 10px 22px; font-family: system-ui, sans-serif; font-size: 15px; font-weight: 600; text-decoration: none; box-shadow: 0 4px 20px rgba(0,229,255,0.15); transition: all 0.2s;">
<svg width="20" height="20" viewBox="0 0 16 16" fill="#00e5ff"><path d="M8 0c-.69 0-1.843.265-2.928.56-1.11.3-2.229.655-2.887.87a1.54 1.54 0 0 0-1.044 1.262c-.596 4.477.787 7.795 2.464 9.99a11.8 11.8 0 0 0 4.395 3.32z"/></svg>
<span>Увійти через <strong style="color: #00e5ff;">REANE ID</strong></span>
</a>
Спробуйте повний цикл авторизації прямо тут: натисніть кнопку, зіскануйте QR-код телефоном і побачте, як наш шлюз миттєво редиректить назад з кодом авторизації та видає підтверджений профіль.