Как получить сериализованные в http запросе заявки в коде с использованием WIF? - PullRequest
1 голос
/ 16 декабря 2011

ADFS 2.0, WIF (WS-Federation), ASP.NET: в файле web.config не определены модули http или какая-либо конфигурация IdentityFoundation (как показано в большинстве примеров WIF SDK), вместо этого все выполняется с помощью программного кода вручную, используя Классы WSFederationAuthenticationModule, ServiceConfiguration и SignInRequestMessage. Я делаю http перенаправление на ADFS в коде, и это, кажется, работает нормально, возвращая заявки и перенаправляя пользователя обратно на мой веб-сайт с сериализованными заявками в запросе http. Таким образом, вопрос заключается в том, как проанализировать этот запрос с использованием классов, свойств и методов WIF и извлечь из него значения утверждений? Спасибо

1 Ответ

1 голос
/ 22 декабря 2011

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

 var message = SignInResponseMessage.CreateFromFormPost(Request) as SignInResponseMessage;

 var rstr = new WSFederationSerializer().CreateResponse(message, new WSTrustSerializationContext(SecurityTokenHandlerCollectionManager.CreateDefaultSecurityTokenHandlerCollectionManager()));

 var issuers = new ConfigurationBasedIssuerNameRegistry();
 issuers.AddTrustedIssuer("630AF999EA69AF4917362D30C9EEA00C22D9A343", @"http://MyADFSServer/adfs/services/trust");

 var tokenHandler = new Saml11SecurityTokenHandler {CertificateValidator = X509CertificateValidator.None};   
 var config = new SecurityTokenHandlerConfiguration{
     CertificateValidator = X509CertificateValidator.None,
     IssuerNameRegistry = issuers};

 config.AudienceRestriction.AllowedAudienceUris.Add(new Uri("MyUri"));
 tokenHandler.Configuration = config;
 using(var reader=XmlReader.Create(new StringReader(rstr.RequestedSecurityToken.SecurityTokenXml.OuterXml)))
   {
     token = tokenHandler.ReadToken(reader);
   }
 ClaimsIdentityCollection claimsIdentity = tokenHandler.ValidateToken(token);

Я нашел несколько похожих кодов, использующих SecurityTokenServiceConfiguration (он содержит обработчики токенов) вместо Saml11SecurityTokenHandler для чтения и анализа токена, однако он не работализ-за сбоя проверки сертификата.Установка SecurityTokenServiceConfiguration.CertificateValidator на X509CertificateValidator.None не помогла, потому что классы Security Token Handler используют свою собственную конфигурацию обработчика и игнорируют значения конфигурации STS, по крайней мере, если вы задаете параметры конфигурации через код, как я, но это прекрасно работает в случае, если конфигурация определенав web.config.

...