Тип статьи | |||||
---|---|---|---|---|---|
Компетенции | |||||
Необходимые права | |||||
Версия платформы | |||||
Статус |
| ||||
Сложность | |||||
Полезные ссылки | |||||
Дополнительные сведения |
...
base64UrlEncode(payload),
SECRET_KEY)
К подписи применяется алгоритм кодирования Base64-URL.
Условный код формирования токена
Алгоритм формирования токена может быть отражен следующим псевдокодом:
const header =
Блок кода |
---|
header = '{"alg":"HS256","typ":"JWT"}' // строка |
payload = '{"user_id":1,"exp":1581357039}' // |
// кодируем заголовок и данные в base64
const headerBase64 =
строка headerBase64 = base64urlEncode(header) |
payloadBase64 = base64urlEncode(payload) |
// склеиваем точкой полученные строки
const data = headerBase64 +
data = headerBase64 + '.' + |
// кодируем алгоритмом шифрования нашим ключем шифрования
const secret =
payloadBase64 secret = '123456' |
sig = HMAC-SHA256(data, secret |
// и, наконец, получаем окончательный токен
const jwt = data +
) sigBase64 = base64urlEncode(sig) jwt = data + '.' + |
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