Настройка JWT для Single Sign-On
Настройка на стороне Teachbase
Для настройки авторизации через JWT необходимо перейти в раздел “Настройки”, выбрать вкладку “API и интеграции” и затем нажать “Настройка JWT для Single Sign-On”.
Описание полей:
Security key | Криптографический ключ и секретная часть JWT токена. | Обязательное |
Identity provider URL | Адрес страницы сайта, на которой располагается скрипт для генерации JWT токенов. | Обязательное |
Logout URL | Адрес страницы сайта, на которой располагается скрипт для генерации JWT токенов для выхода пользователя. | Обязательное |
Ключ для email пользователя | Соответствие поля email пользователя в LMS с аналогичным внешним атрибутом JWT | Опциональное (Обязательное, если отсутствует ключ для телефона пользователя) |
Ключ для телефона пользователя | Соответствие поля phone пользователя в LMS с аналогичным внешним атрибутом JWT | Опциональное (Обязательное, если отсутствует ключ для email пользователя) |
Ключ для имени пользователя | Соответствие поля name пользователя в LMS с аналогичным внешним атрибутом JWT | Опциональное |
Ключ для фамилии пользователя | Соответствие поля last_name пользователя в LMS с аналогичным внешним атрибутом JWT | Опциональное |
Ключ для uid провайдера пользователя | Соответствие поля внешнего uid пользователя в LMS с аналогичным внешним атрибутом JWT | Опциональное |
Обратите внимание: одно из полей “Ключ для телефона пользователя” или “Ключ для email пользователя” является обязательным, так как если не будет сразу двух значений, то добавить пользователя в Teachbase не получится.
Настройки:
- Перенаправлять пользователя для авторизации на страницу входа через SSO - если включено, то если пользователь не авторизован в Teachbase и не авторизован на стороне провайдера -> пользователь открывает страницу входа в ваш аккаунт (для работы данного типа сквозной авторизации аккаунт должен иметь свой домен или поддомен в Teachbase), то нужно перенаправить его сначала на страницу входа через провайдер авторизации - “Identity provider URL”, После ввода логина и пароля на стороне поставщика идентификации пользователь авторизуется и попадает в Teachbase.
- Разрешить регистрацию новых пользователей - если включено, то если такого пользователя еще нет в Teachbase в вашем аккаунте, то его необходимо создать, активировать и авторизовать.
Дополнительная информация
- Алгоритм хеширования - HS256
- Шифрование - base64
Токен содержит:
name: @user.name,
last_name: @user.last_name,
email: @user.email,
phone: @user.phone,
sub: @user.sub
Схема работы интеграции
Пример реализации Jwt provider
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const port = 3000;
// Секретный ключ для подписи JWT (в реальном приложении храните это в защищенном месте)
const JWT_SECRET = 'your_secret_key';
// Данные пользователя (в реальном приложении эти данные должны быть получены из базы данных или другого источника)
const user = {
name: 'John',
last_name: 'Doe',
email: 'john.doe@example.com',
phone: '+1234567890',
sub: 'user123'
};
// Маршрут для эмуляции Identity Provider и генерации JWT токена
app.get('/identity-provider', (req, res) => {
const callbackUrl = req.query.callback_url;
if (!callbackUrl) {
return res.status(400).send('Missing callback URL');
}
// Создание JWT токена с данными пользователя
const token = jwt.sign({
name: user.name,
last_name: user.last_name,
email: user.email,
phone: user.phone,
sub: user.sub
}, JWT_SECRET, { expiresIn: '1h' });
// Перенаправление на callback URL с JWT токеном
res.redirect(`${callbackUrl}?jwt=${token}`);
});
app.listen(port, () => {
console.log(`JwtProvider running at http://localhost:${port}`);
});
php Laravel
routes/web.php
use App\Http\Controllers\IdentityProviderController;
Route::get('/identity-provider', [IdentityProviderController::class, 'generateToken']);
app/Http/Controllers/IdentityProviderController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Tymon\JWTAuth\Facades\JWTAuth;
class IdentityProviderController extends Controller
{
// Данные пользователя (в реальном приложении эти данные должны быть получены из базы данных или другого источника)
private $user = [
'name' => 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'phone' => '+1234567890',
'sub' => 'user123'
];
public function generateToken(Request $request)
{
$callbackUrl = $request->query('callback_url');
if (!$callbackUrl) {
return response()->json(['error' => 'Missing callback URL'], 400);
}
// Создание JWT токена с данными пользователя
$token = JWTAuth::fromUser((object)$this->user);
// Перенаправление на callback URL с JWT токеном
return redirect()->away("{$callbackUrl}?jwt={$token}");
}
}