Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Тип статьи

Компетенции

Необходимые права

Версия платформы

Статус

Статус
titleЧерновик

Сложность(синяя звезда)

Полезные ссылки

Дополнительные сведения

...

  base64UrlEncode(payload),

  SECRET_KEY) 

К подписи применяется алгоритм кодирования Base64-URL.

Условный код формирования токена

Алгоритм формирования токена может быть отражен следующим псевдокодом:

const header =

Блок кода
header = '{"alg":"HS256","typ":"JWT"}' // строка
const

payload = '{"user_id":1,"exp":1581357039}' //
строка

// кодируем заголовок и данные в base64

const headerBase64 =

 строка
headerBase64 = base64urlEncode(header)
const

payloadBase64 = base64urlEncode(payload)

// склеиваем точкой полученные строки

const data = headerBase64 +


data = headerBase64 + '.' +
payloadBase64

// кодируем алгоритмом шифрования нашим ключем шифрования

const secret =

 payloadBase64
secret = '123456'
const

sig = HMAC-SHA256(data, secret
)

// и, наконец, получаем окончательный токен

const jwt = data +

)
sigBase64 = base64urlEncode(sig)
jwt = data + '.' +
sig
 sigBase64

 

 

Конфигурация платформы Visiology

...

 

 

 

 

issuer

string, должен быть корректный URI

Чувствительный к регистру URI внешней системы, которая является уникальным идентификатором стороны, генерирующей токен

Обязательно для заполнения.

jwtKey

string

Секретный ключ для алгоритма HMAC. Его знают два клиента – внешняя система и платформа Visiology

Обязательно для заполнения.

rolesMapping

Массив значений

{

  “id”: string,

  “name”:string

}

Маппинг-соотношение внешних ролей пользователя к внутренним ролям системы

Обязательно для заполнения.

attributeFilters

Массив значений string

Перечень  атриубтов, по которым предпологается фильтрация на источнике данных ViQube.  

Обязательно для заполнения. Сам массив может быть пустым – содержать 0 элементов

 

Файл для редиректа

...

Блок кода
<!DOCTYPE

...

<html>

<head>

...

 html>
<html><head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

...


</

...

<body>

...

head><body></body>

...

 


<script>

...


var url = 'http://visiologyServer/idsrv/ExternalAccount/Login';

...


var form = $('<form action="' + url + '" method="post" >' +

...


'<input type="hidden" name="token" value="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InNpZG9yb3YiLCJzZWN0aW9uIjoic3lzdGVtIiwidXNlclJvbGVzIjpbMTAxLDEwMl0sImlhdCI6MTU5OTgzNjkyMiwiZXhwIjoxNTk5OTk2OTIyLCJpc3MiOiJodHRwczovL2JpLmV4dGVybmFsU3lzdGVtLnJ1In0.lZJMEluzmnM6lZ6qfDqnA3b1TEJMmT8_PIzTGM-qTuA" />' +

...


  '</form>');

...


$('body').append(form);

...

 form.submit();

...


</script>

...

 

...


 </html>

Редирект В ответе платформа инициирует редирект на портал только.

php для полу

hash_hmac(
string $algo, //"sha256"
string $data,
string $key,
bool $binary = false
): string

function base64UrlEncode(string $data): string
{
$base64Url = strtr(base64_encode($data), '+/', '-_');

Блок кода
return rtrim($base64Url, '=');

}

function base64UrlDecode(string $base64Url): string
{
return base64_decode(strtr($base64Url, '-_', '+/'));
}

function base64url_encode($data)
{
// First of all you should encode $data to Base64 string
$b64 = base64_encode($data);

// Make sure you get a valid result, otherwise, return FALSE, as the base64_encode() function do
if ($b64 === false) {
return false;
}

// Convert Base64 to Base64URL by replacing “+” with “-” and “/” with “
$url = strtr($b64, '+/', '-');

// Remove padding character from the end of line and return the Base64URL result
return rtrim($url, '=');
}

/**

  • Decode data from Base64URL

  • @param string $data

  • @param boolean $strict

  • @return boolean|string
    */
    function base64url_decode($data, $strict = false)
    {
    // Convert Base64URL to Base64 by replacing “-” with “+” and “” with “/”
    $b64 = strtr($data, '-', '+/');

// Decode Base64 string and return the original data
return base64_decode($b64, $strict);
}

Предупреждение

Описание проблемы

Подсказка

Описание решения

...

Практический пример

Имеем сервер joomla4 на http://joomla.test.com и платформу на http://visiology-cross.org