Менеджерам обучения
API и интеграции
Настройка JWT для Single Sign-On

Настройка 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}");
    }
}