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

Ключ

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

Тип статьи

Инструкция по настройке кроос-авторизации между двумя системами с ролевой моделью

Компетенции

JS, HTML, PHP, SSH

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

root, администратор платформы

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

2.26

Статус

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

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

Сложно

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

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

...

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

Статья с инъекцией php (фактический url index.php?view=article&id=2:test-redirect&catid=2)

Блок кода
{source}
<?php
$user = JFactory::getUser();
$userRoles = [];
foreach($user->groups as $key => $value) array_push($userRoles,$value);
$header = json_encode(['alg' => 'HS256', 'typ' => 'JWT']);
$payload = json_encode([ 'username' => $user->username, 'section' => 'joomla', 'userRoles' => $userRoles, 'iat'=> time(),
 'exp' => time()+15*60, 'iss'=> "http://joomla.test.com"],JSON_UNESCAPED_SLASHES);
$headerUrlBase64 = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($header));
$payloadUrlBase64 = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($payload));
$key = 'c4;RZa9"iSszk@j';
$data = $headerUrlBase64.'.'.$payloadUrlBase64;
$sig = hash_hmac('sha256',$data, $key, true);
$base64UrlSignature = str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($sig));
$jwt = $data.'.'.$base64UrlSignature;
?>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script>
var url = 'http://visiology-cross.org/idsrv/ExternalAccount/Login';
var form = $('<form action="' + url + '" method="post" >' +
'<input type="hidden" name="token" value="<?php echo $jwt; ?>" /></form>');
$('body').append(form);
</script>
{/source}

Статья , в которой будет показан дашборд

Блок кода
<iframe class="iframe" src="index.php?view=article&id=2:test-redirect&catid=2" name="Preview" width="340" height="280"></iframe>

docker-volume/identity-server/configuration/externalAccount.config.json

Блок кода
{
    "issuer": "http://joomla.test.com",
    "jwtKey": 'c4;RZa9"iSszk@j',
    "rolesMapping":
        [
            {
                "id": "8",
                "name": "joomla"
            }
        ],
     "attributeFilters": []
}r

Для редиректа не на портал, а на конкретный дашборд корректируем на платформе nginx

Блок кода
location / {
            if ($http_referer !~ ^http://joomla.test.com) {
                return 301 /viewer?dashboardGuid=25c2b3c35dcf450689ed0e462f38461f;
            }
            proxy_pass $portal_url;
        }