SAML ужасен, каждый раз, когда я читаю ответ, они почти верны, вот правильный алгоритм:
- SHA1 каноническая версия Утверждения.
- Создание SignedInfoФрагмент XML с подписью SHA1
- Подпись фрагмента XML SignedInfo, снова каноническая форма
- Возьмите SignedInfo, подпись и ключевую информацию и создайте фрагмент XML подписи
- Вставьте этот SignatureXML в утверждение (должно идти прямо перед saml: subject)
- Не принимать утверждение (с включенной подписью) и вставьте в ответ
- SHA1 этот ответ
- Создание XML-фрагмента SignedInfo с подписью SHA1
- Подписание XML-фрагмента SignedInfo, снова каноническая форма
- Возьмите SignedInfo, подпись и ключевую информацию и создайте XML-фрагмент Signature
- Вставьте этот SignatureXML в ответ
- Добавьте информацию о версии XML в ответ.
Вот и все.SAML совершенно ужасно.Есть множество мелких тонкостей, которые делают реализацию SAML кошмаром (например, вычисление канонической формы подмножества XML (утверждение), также не включена XML-версия XML-документов.
Я закончил свою реализациюЯ надеюсь, что больше никогда не вернусь к такой боли.