Виджет

Интеграция SSO

Интеграция по Single Sign-On (SSO), которая позволяет пользователям вашего сайта быть автоматически авторизованными внутри виджета комментариев

Для настройки нужно указать объект sso внутри JavaScript для вставки комментариев.

Значение параметров внутри sso:

ПараметрОписание
dataJSON данные закодированные в base 64.
signatureПодпись. MD5 хеш составленный из data, API ключ сайта и timestamp_millis. Например, 4e491c4f3c77fd9bd4569b0c94cacba9. Читайте "Создание подписи" ниже.
timestamp_millisВремя в миллисекундах. Например, 1603040476936

Данные пользователя (data)

Для SSO нужные следующие данные:

ПараметрОбязательный?Описание
idнетУникальный идентификатор пользователя.
nameдаИмя, имя и фамилия или логин пользователя.
emailдаПочта пользователя.
avatar_urlнетСсылка на аватар пользователя.
profile_urlнетСсылка на профиль или сайт пользователя.

Пример (PHP):

$user = [
    'id' => 1,
    'name' => 'John Doe',
    'email' => 'my-email@gmail.com',
    'avatar_url' => 'https://eu.ui-avatars.com/api/?name=John+Doe',
    'profile_url' => 'https://anycomment.io/',
];
$data = base64_encode(json_encode($user));
echo $data; // Выведет: eyJpZCI6MSwibmFtZSI6IkpvaG4gRG9lIiwiZW1haWwiOiJteS1lbWFpbEBnbWFpbC5jb20iLCJhdmF0YXJfdXJsIjoiaHR0cHM6XC9cL2V1LnVpLWF2YXRhcnMuY29tXC9hcGlcLz9uYW1lPUpvaG4rRG9lIiwicHJvZmlsZV91cmwiOiJodHRwczpcL1wvYW55Y29tbWVudC5pb1wvIn0=

Создание подписи (signature)

Подпись должна генерироваться на сервере, например через PHP, так как для формирования нужно использовать API ключ сайта. Если он будет скомпрометирован, то у человека будет возможность управлять вашим сайтом через API.

Подпись формируется на основе следующих данных:

  • Base64 данных пользователя
  • API ключа сайта
  • Время в миллисекундах

Пример с построением подписи:

$user = [
    'id' => 1,
    'name' => 'John Doe',
    'email' => 'my-email@gmail.com',
    'avatar_url' => 'https://eu.ui-avatars.com/api/?name=John+Doe',
    'profile_url' => 'https://anycomment.io/',
];
$data = base64_encode(json_encode($user));
$timestampMillis = round(microtime(true) * 1000);
$signature = md5( implode('', [$data, 'APP_API_KEY', $timestampMillis) );

echo $signature; // Пример вывода: 4e491c4f3c77fd9bd4569b0c94cacba9

Полный пример на PHP

$appId = 'APP_ID'; // Замените на ID своего сайта
$apiKey =  'APP_API_KEY'; // Замените на API ключ своего сайта
$user = [
    'id' => 1,
    'name' => 'John Doe',
    'email' => 'my-email@gmail.com',
    'avatar_url' => 'https://eu.ui-avatars.com/api/?name=John+Doe',
    'profile_url' => 'https://anycomment.io/',
];
$data = base64_encode(json_encode($user));
$timestampMillis = round(microtime(true) * 1000);
$signature = md5( implode('', [$data, $apiKey, $timestampMillis]) );
$config = json_encode([
    'root' => 'anycomment-app',
    'app_id' => $appId,
    'language' => 'ru',
    'sso' => [
        'data' => $data,
        'signature' => $signature,
        'timestamp_millis' => $timestampMillis
    ]
]);
?>

<div id="anycomment-app"></div>
<script>
AnyComment = window.AnyComment || []; AnyComment.Comments = [];
AnyComment.Comments.push(<?= $config ?>)
var s = document.createElement("script"); s.type = "text/javascript"; s.async = true;
s.src = "https://widget.anycomment.io/comment/embed.js";
var sa = document.getElementsByTagName("script")[0];
sa.parentNode.insertBefore(s, s.nextSibling);
</script>

FAQ

Как принудить пользователя выйти?

Есть два варианта:


Сколько живет подпись по времени?

Подпись живет в течении 10 минут, далее она перестает работать. Будет выдавать 403 ошибку во время авторизации.


В каких случаях авторизация не будет работать?

Авторизация не будет работать для пользователей, которые имеют права модератора. Сделано это в целях безопасности, таким пользователям нужно авторизоваться вручную.


В каких случаях авторизация не будет работать?

Авторизация не будет работать для пользователей, которые имеют права модератора. Сделано это в целях безопасности, таким пользователям нужно авторизоваться вручную.