Проверка подписи OKTA SAML - PHP

Мое приложение (PHP) получает ответ SAML от OKTA, который имеет значение подписи, и у меня также есть сертификат OKTA с открытым ключом. Мое приложение делает следующее,

  1. Получает открытый ключ из сертификата.
  2. Получает значение подписи из отправленного ему SAML.
  3. Теперь он использует функцию openssl_verify($data, $signature, $pubkeykey,"sha1WithRSAEncryption"); Поскольку $data — это содержимое, используемое OKTA для подписи ответа saml, я не уверен, что нужно установить $data.

Мой код,

$pubkeyid = openssl_pkey_get_details(openssl_pkey_get_public(file_get_contents("okta.cert")));
$pubkeyid = $pubkeyid["key"];
$signature = "<get it form SAML Response>";
$data = ???? (what should be provided) 
$ok = openssl_verify($data, $signature, $pubkeyid,"sha1WithRSAEncryption");

Я всегда получаю 0, когда присваиваю значение данных ответу SAML, отправляемому приложению. Я что-то пропустил ?


person Narayan Gowraj    schedule 15.10.2015    source источник


Ответы (2)


Проверка подписи SAML — это гораздо больше, чем вызов функции openssl_verify(). Я бы предложил использовать для этой цели какую-нибудь библиотеку, например https://github.com/lightSAML/lightSAML.

В этом случае, используя LightSAML-Core, проверку подписи можно выполнить, как описано на их странице кулинарной книги http://www.lightsaml.com/LightSAML-Core/Cookbook/How-to-verify-signature-of-SAML-message/, выполнив следующие действия.

  • десериализовать XML в объект модели данных - в вашем случае класс Response
  • загрузить открытый ключ IDP из его сертификата из своих метаданных
  • вызвать метод validate() для свойства подписи ответа

Обратите внимание, что правильная обработка ответа — это больше, чем просто проверка подписи. Полный профиль системы единого входа в веб-браузере SAML предусматривает дополнительные проверки, которые также реализует LightSAML.

Вы можете проверить LightSAML/SpBundle, если вы используете Symfony, так как он реализует полный профиль SAML SSO и интегрируется с системой безопасности Symfony, что упрощает внедрение SAML SSO.

Если вы действительно хотите сделать это самостоятельно с нуля, вы можете проверить, как это делает xmlseclibs, например, в одном из поддерживаемых форков на https://github.com/rorichards/xmlseclibs.

person Milos Tomic    schedule 15.12.2015

Да, использование правильных инструментов важно. Мы только начинаем этот путь и нашли инструменты разработчика OKTA на сайте OKTA: http://developer.okta.com/docs/sdk/core/api.html.

Мы надеемся, что предоставленные ими библиотеки сделают использование их услуг намного проще.

person user1920897    schedule 27.01.2016