Интеграция Single Sign-on

Определения

Техническая информация

Включение и отключение единого входа SSO

Авторизация SSO

Описание выхода из SSO

Схема

Шаги

Реализация

Реализация со стороны сервера (PHP)

Реализация со стороны клиента

Инициализация

Шифрование

Расшифровка

SolidOpinion JavaScript API


Определения

AES - Advanced Encryption Standard (AES), также известный как Rijndael (его первоначальное название), является спецификацией для шифрования электронных данных, созданной Национальным институтом стандартов и технологий США (NIST) в 2001 году. Алгоритм, описанный AES Является алгоритмом с симметричным ключом, то есть тот же ключ используется для шифрования и дешифрования данных.

Automatic SSO - позволяет пользователям автоматически подписываться в / зарегистрироваться в SolidOpinion, используя свою учетную запись на вашем веб-сайте.

Encryption key (ключ шифрования) - секретный ключ (32 символа), используемый как для шифрования, так и для дешифрования данных в алгоритме AES. НЕ ПЕРЕДАВАЙТЕ ЭТОТ КЛЮЧ НИКОМУ!

Public key (публичный ключ) - ключ, используемый для проверки подписи, является частью алгоритма подписи асимметричного ключа. Ключ подписи - секретный ключ, используемый для подписи подписи, является частью алгоритма подписи асимметричного ключа. НЕ ПЕРЕДАВАЙТЕ ЭТОТ КЛЮЧ НИКОМУ!

Single sign-on (SSO) – это свойство контроля доступа нескольких взаимосвязанных, но независимых программных систем. С помощью этого свойства пользователь входит в систему один раз и получает доступ ко всем системам без необходимости повторного входа в систему для каждого из них

Техническая информация

SolidOpinion запрашивает, пользовательский адрес электронной почты в качестве уникального идентификатора в системе,
предназначен для входа / регистрации пользователя. Если ваша система не требует уникального email, SolidOpinion будет генерировать его на основе другой уникальной информации (id, username, uid и т.д.)

Убедитесь, что время на вашем сервере синхронизировано с серверами NTP, так как отметка времени участвует в процессе проверки данных. Не отправляйте одни и те же зашифрованные данные более одного раза, так как эту ситуацию можно считать "повторной атакой", - будет обрабатываться только первое сообщение.

Включеине и отключение единого входа SSO

Чтобы включить SSO SolidOpinion для вашего веб-сайта, войдите в свою учетную запись SolidOpinion, чтобы изменить настройки сайта. Перейдите на вкладку "Ваши сайты" и найдите сайт, для которого необходимо включить единый вход. Нажмите на маленькую стрелку рядом с кнопкой «Настройки» и выберите "Фильтры" в раскрывающемся списке. Установите флажок "Включить единый вход", чтобы создать новые ключи шифрования и включить единый вход. После завершения операции вы увидите сгенерированные клавиши. Чтобы применить изменения, нажмите кнопку "Сохранить изменения".

Чтобы отключить SSO, просто снимите галочку с флажка "Включить единый вход" и нажмите кнопку "Сохранить изменения", чтобы применить изменения. Будьте осторожны, если какой-либо из ваших секретных ключей (шифрование или вход в систему / взлом) предположительно скомпрометирован, немедленно восстановите все ключи единого входа. Для этого отключите и снова включите SSO. Убедитесь, что вы изменили соответствующие ключи на своем сервере.
 
Авторизация SSO

Авторизация SSO выполняется таким образом: $ SO.SSOLogIn (YOUR_ECRYPTED_KEY); Отложенный SSO позволяет нам авторизовать пользователей с помощью зашифрованного ключа SSO в JavaScript. Ключ такой же, как и для контейнера div, зашифрованного данными SolidOpinion. Он должен использоваться на сайтах, которые разрешают пользователям без "перезагрузки" контента страницы для синхронизации авторизации сайта с SolidOpinion.
 
Описание выхода из SSO

SSO LogOut выполняется таким образом: LogOut пользователя станет частью публичной SolidOpinion api (теперь в бета-версии). После загрузки виджета у вас будет "$ SO object", который должен иметь некоторые методы для управления виджетом. Вызвав метод "$ SO.LogOut ();" Авторизация будет удалена из Пользователя.

Схема



Шаги

1) Свяжитесь с SolidOpinion и предоставьте нам информацию о структуре ваших пользовательских данных и ваших HTTP-источниках, чтобы мы могли добавить заголовок CORS для них
2) Включите SSO для вашего веб-сайта в настройках, как описано в разделе «Включение и отключение единого входа».
3) Скопируйте сгенерированные ключи и сохраните их на своем сайте. ПОЖАЛУЙСТА, НЕ ЗАХВАТЫВАЙТЕ КЛЮЧИ НА СТОРОНУ КЛИЕНТА (то есть в JS)
4) Пользователь входит на веб-страницу вашего сайта, отправляя учетные данные на ваш сайт
5) Если учетные данные верны, информация пользователя упаковывается в словарь / ассоциативный массив (полезная нагрузка), так что ключи являются именами полей, а значениями являются соответствующие значения
6) Если пользователь аутентифицирован в вашей системе - полезная нагрузка зашифровывается с помощью библиотеки, предоставляемой SolidOpinion, и отправляет обратно зашифрованные данные на веб-страницу; Если пользователь не аутентифицирован - просто передайте пустую строку в атрибут data-encrypted
7) Веб-страница загружает виджет SolidOpinion и передает зашифрованные данные в атрибут «зашифрованные данные»
8) Виджет отправляет зашифрованные данные в SolidOpinion API, где данные дешифруются
9) Если процесс расшифровки завершился успешно, и полезная нагрузка пользователя была извлечена, SolidOpinion проверяет, существует ли пользователь в системе. Если нет, пользователь регистрируется с предоставленными учетными данными. После этого пользователь автоматически выполнит вход в систему
10) Виджет получает ответ API и регистрирует пользователя в
11) Следуйте по этой ссылке, чтобы загрузить библиотеку файлов  soauth.php  

Реализация

Реализация на стороне сервера (PHP)
require(YOUR_PATH_TO_LIB . ‘/soauth.php’); 
use SolidOpinion\SOAuth;

define("ENCRYPTION_KEY","<paste_your_encryption_key_here>"); 
define("SIGNING_KEY","<paste_your_signing_key_here>"); 
define("PUBLIC_KEY","<paste_your_public_key_here>"); 
// your payload structure 
$payload = [ 
'user' => $user['name'], 'email' => $user['email'], 'avatar' => $user['avatar_url'] 
]; 
$soAuth = new SOAuth(ENCRYPTION_KEY, SIGNING_KEY, PUBLIC_KEY); 
$data = $soAuth->encrypt($payload);
Реализация со стороны  клиента
Загрузить soauth.php  
<div class="so_comments" data-
sitename="YOUR_SITE_NAME_ID"  data-encrypted='<?php echo($data); ?

>'></div> 
<script src="//api.solidopinion.com/widget/embed.js" async="async"></script>
Инициализация
/**
*Constructor initialized with 3 keys
*@param string $encKey encryption key
*@param string $signKey signing key
*@param  string $pubKey public key
*@throws SOException
*/
public function__construct($encKey,$signKey,$pubKey)
{
if (!extension_loaded('openssl')){
throw newSOException('OpenSSLlib is not loaded');
}
if(SOUtils::strlen($encKey)!=SOUtils::keylen()){
throw new SOException('Invalid encryption key length');
}
$this->_encKey = $encKey;
$this->_signKey = $signKey;
$this->_pubKey = $pubKey;
//Generate initialization vector
$this->_iv = openssl_random_pseudo_bytes(SOUtils::keylen()/2,$strong);
if(!$strong){
throw new SOException('OpenSSL version is out of date');
}
//keylen equals 32
$bitLength = 8 * SOUtils::keylen();
$this->_mode ='aes-'.$bitLength.'-cbc';
$this->_option =defined('OPENSSL_RAW_DATA')? OPENSSL_RAW_DATA:      
true;
}
Шифрование
/**
* Encrypts data
* @param array|mixed $payload array contains user data
* @return string
* @throws SOException
*/
public function encrypt($payload)
{
//Complete payload with timestamp and hash
date_default_timezone_set("UTC");
$payload['_timestamp'] = time();
$payload['_rnd'] = sha1($payload['_timestamp']);
//convert payload to JSON
$jsonPayload = json_encode($payload);
// Encrypt payload with AES CBC        
$ciphers = openssl_get_cipher_methods();
if (!in_array($this->_mode, $ciphers)) {
throw new SOException('No suitable cipher method available');
}
// Encrypt data with encryption key
$data = openssl_encrypt(
$jsonPayload,
$this->_mode,
$this->_encKey,
$this->_option,
$this->_iv
);
//Base64 encode iv . salt . data
$salt = openssl_random_pseudo_bytes(SOUtils::keylen() / 2);
$encData = base64_encode($this->_iv . $salt . $data);
// Sign with private signing  key
if (!openssl_sign(
$encData,
$signature,
$this->_signKey,
OPENSSL_ALGO_SHA1
)){
throw new SOException('Failed to sign data');
}
// Concat data with signature and base64 encode
$result = base64_encode($encData . '|' . $signature);
return $result;
Расшифровка
/**
*Constructor initialized with 3 keys
*@param string $encKey encryption key
*@param string $signKey signing key
*@param  string $pubKey public key
*@throws SOException
*/
public function__construct($encKey,$signKey,$pubKey)
{
if (!extension_loaded('openssl'))
{
throw newSOException('OpenSSLlib is not loaded');
}
if(SOUtils::strlen($encKey)!=SOUtils::keylen())
{
throw new SOException('Invalid encryption key length');
}
$this->_encKey = $encKey;
$this->_signKey = $signKey;
$this->_pubKey = $pubKey;
//Generate initialization vector
$this->_iv = openssl_random_pseudo_bytes(SOUtils::keylen()/2,$strong);
if(!$strong){
throw new SOException('OpenSSL version is out of date');
}
//keylen equals 32
$bitLength = 8 * SOUtils::keylen();
$this->_mode ='aes-'.$bitLength.'-cbc';
$this->_option =defined('OPENSSL_RAW_DATA')? OPENSSL_RAW_DATA:      
true;
}
SolidOpinion JavaScript API   

Для получения подробной информации о JavaScript API, пожалуйста нажмите сюда


Приятного комментирования! 
SolidOpinion

Manuals in other languages

  1. Руководство по основным параметрам сайта
  2. Полное руководство по параметрам сайта
  3. Вкладка “Основное”
  4. Как изменить пароль аккаунта SolidOpinion
  5. Как восстановить пароль
  6. Как включить уведомления
  7. Как SEO-оптимизировать Ваши комментарии?
  8. Как передать монеты
  9. Локализация
  10. Виджет "Промо Заголовки"
  11. Виджет "Промо заголовки" (настройка)
  12. Виджет "Промо комментарии"
  13. Виджет "Промо комментарии" (настройка)
  14. Цена за чтение для владельца сайта
  15. Вкладка "Внешний вид"
  16. Настройка сортировки комментариев для сайта
  17. Вкладка "Фильтры"
  18. Установка виджета на несколько доменов
  19. Черный и Белый список
  20. Модерация
  21. Постмодерация
  22. Тег модератора
  23. Добавить нового модератора
  24. Вкладка "Правила"
  25. Создание специальных эффектов
  26. Система званий для владельца сайта
  27. Каcтомные ранги
  28. Режим эксперта для владельца сайта
  29. Вкладка "Награды"
  30. Интеграция виджета "Промо" с другими система комментариев
  31. Типы основного виджета
  32. Дополнительные виджеты
  33. ВИДЖЕТ
  34. Виджет "Комментарии"
  35. Виджет "Комментарии" (параметры)
  36. Виджет "Промо"
  37. Виджет "Промо" (параметры)
  38. Виджет "Промо заголовки"
  39. Виджет "Промо заголовки" (параметры)
  40. Виджет "Сообщество"
  41. Виджет "Сообщество" (параметры)
  42. Виджет "Счетчик"
  43. Виджет "Счетчик" (параметры)
  44. Виджет (установка)
  45. Как установить виджет “Промо Заголовок”
  46. ИНТЕГРАЦИЯ
  47. Интеграция в BigCommerce
  48. Интеграция в Blogger
  49. Интеграция с платформой Wix
  50. Интеграция в Drupal
  51. Интеграция в Joomla
  52. Интеграция в WordPress
  53. Реализация специальних эффектов в Wordpress
  54. Импорт WordPress .xml
  55. Импортирование комментариев из системы Disqus
  56. Создание XML файла для импорта комментариев
  57. ПЛАГИН SOLIDOPINION
  58. Плагин SolidOpinion для Blogger
  59. Плагин SolidOpinion для Drupal
  60. Плагин SolidOpinion для Joomla
  61. Плагин SolidOpinion для Wordpress
  62. Интеграция SSO
  63. Интеграция Single Sign-on
  64. Интеграция плагина SSO Wordpress
  65. SolidOpinion JavaScript API
  66. Интеграция мобильного SDK
  67. Интеграция Android SDK
  68. Интеграция  IOS SDK
  69. Примечание к релизу
  70. Быстрый и простой способ добавить продвинутые комментарии и заголовки
  71. Использование эффектов в комментировании
  72. Изменить имя автора
  73. Изменить фото автора
  74. Запретить автору комментировать
  75. Продвинутые комментарии для комментаторов
  76. Продвинутые заголовки для комментаторов
  77. Вставить ремарку
  78. Показывать в начале обсуждения
  79. Бросить в автора монетную бомбу
  80. Игнорировать автора
  81. Цена за чтение для комментаторов
  82. Добавить эмоцию
  83. Добавить фото
  84. Вставить видео
  85. Отметить как спам
  86. Иммунитет комментария от эффектов
  87. Отмена всех эффектов
  88. Добавить формат
  89. Запретить ответы
  90. Много голосов "ЗА"/голосов "ПРОТИВ"/раз "нравится"/раз "не нравится"
  91. Нравится/Не нравится/Голосовать ЗА/Голосовать ПРОТИВ
  92. Ответить на комментарий
  93. Редактировать комментарий
  94. Удалить комментарий
  95. Варианты сортировки комментариев
  96. Система званий для комментаторов
  97. Режим эксперта для комментаторов
  98. Промо виджет для комментаторов
  99. Как добавить URL к "Промо Заголовку"
  100. Подписаться на комментарии к статье
  101. Поддержка браузера
  102. Локализация для комментаторов

Feedback and Knowledge Base