Я использую последнюю версию библиотеки C# SAML2 (4.3.1) и успешно использую ее с Okta; однако при попытке интеграции с другим поставщиком удостоверений я получаю следующую ошибку:
ArgumentException: IDX13300: «System.String» должен быть абсолютным Uri, было: «System.Uri»
Похоже, он жалуется на атрибут saml:AuthnContextDeclRef, который имеет значение:
ncid/secure/form/30min/uri
Я не уверен, но думаю, возможно, библиотека ожидает, что этот атрибут будет абсолютным Uri. Клиент говорит, что это значение вытекает из его контракта и одинаково для всех, поэтому его нельзя изменить. У них есть другие успешно интегрированные приложения (они упомянули, что некоторые используют ComponentSpace). Есть ли какие-либо настройки, которые я могу изменить или исправить, чтобы это работало? Я просмотрел доступные настройки, и ничего похожего на них нет. Единственное, что я могу сделать на данный момент, это попробовать другую библиотеку SAML.
ОБНОВЛЕНИЕ:
Таким образом, мне удалось отследить проблему до того, что атрибут «Ссылка на объявление» не является абсолютным Uri. Эта проверка осуществляется в классе Microsoft.IdentityModel.Tokens.Saml2.Saml2AuthenticationContext, который представляет часть токена Saml2. Я согласен, что лучшим решением было бы изменить ссылку на объявление на абсолютный Uri, но, поскольку клиент говорит, что он не может или не хочет изменить значение, мне нужно было решение.
Мне удалось загрузить исходный код ITFoxtec.Identity.Saml2 и внести несколько изменений, чтобы он использовал собственный Saml2Serializer, который переопределяет метод ReadAuthenticationContext и пропускает часть, которая устанавливает ссылку на объявление при аутентификации. Контекст. ITFoxtec не использует это свойство… на самом деле, у него есть код, который устанавливает для него значение null, если оно имеет значение, поэтому предотвращение установки свойства в первую очередь не должно вызывать каких-либо проблем и позволяет считывать токен SAML, не вызывая ошибки проверки.