2015-10-15 2 views
3

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

  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 ответ посылается приложению. Я что-то упустил?

ответ

4

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

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

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

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

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

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

2

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

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