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