Интеграция по Single Sign-On (SSO), которая позволяет пользователям вашего сайта быть автоматически авторизованными внутри виджета комментариев
Для настройки нужно указать объект sso
внутри JavaScript для вставки комментариев.
Значение параметров внутри sso
:
Параметр | Описание |
---|---|
data | JSON данные закодированные в base 64. |
signature | Подпись. MD5 хеш составленный из data , API ключ сайта и timestamp_millis . Например, 4e491c4f3c77fd9bd4569b0c94cacba9 . Читайте "Создание подписи" ниже. |
timestamp_millis | Время в миллисекундах. Например, 1603040476936 |
Для SSO нужные следующие данные:
Параметр | Обязательный? | Описание |
---|---|---|
id | да, если не указан email | Уникальный идентификатор пользователя. |
name | да | Имя, имя и фамилия или логин пользователя. |
email | да, если не указан id | Почта пользователя. |
avatar_url | нет | Ссылка на аватар пользователя. |
profile_url | нет | Ссылка на профиль или сайт пользователя. |
Если указаны id
и email
, email
берет приоритет.
Пример (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/profile/1',
];
$data = base64_encode(json_encode($user));
echo $data; // Выведет: eyJpZCI6MSwibmFtZSI6IkpvaG4gRG9lIiwiZW1haWwiOiJteS1lbWFpbEBnbWFpbC5jb20iLCJhdmF0YXJfdXJsIjoiaHR0cHM6XC9cL2V1LnVpLWF2YXRhcnMuY29tXC9hcGlcLz9uYW1lPUpvaG4rRG9lIiwicHJvZmlsZV91cmwiOiJodHRwczpcL1wvYW55Y29tbWVudC5pb1wvcHJvZmlsZVwvMSJ9
Подпись должна генерироваться на сервере, например через PHP, так как для формирования нужно использовать API ключ сайта. Если он будет скомпрометирован, то у человека будет возможность управлять вашим сайтом через 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
$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>
Как принудить пользователя выйти?
Есть два варианта:
logout
. Подробнее можно почитать на странице виджетаnull
для sso
, пример: sso: null
Сколько живет подпись по времени?
Подпись живет в течении 10 минут, далее она перестает работать. Будет выдавать 403 ошибку во время авторизации.
В каких случаях авторизация не будет работать?
Авторизация не будет работать для пользователей, которые имеют права модератора. Сделано это в целях безопасности, таким пользователям нужно авторизоваться вручную.
В каких случаях авторизация не будет работать?
Авторизация не будет работать для пользователей, которые имеют права модератора. Сделано это в целях безопасности, таким пользователям нужно авторизоваться вручную.