Тип статьи | Инструкция по настройке кроос-авторизации между двумя системами с ролевой моделью | ||||
---|---|---|---|---|---|
Компетенции | JS, HTML, PHP, SSH | ||||
Необходимые права | root, администратор платформы | ||||
Версия платформы | 2.26 | ||||
Статус |
| ||||
Сложность | Сложно | ||||
Полезные ссылки | |||||
Дополнительные сведения |
...
Имеем сервер 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;
} |