Probleme beim Lesen der Authentifizierung eines SAML-assertion in .Net mit WSSecurityTokenSerializer

Ich habe eine SAML-assertion, dass ich wünschte, sich zu authentifizieren, in .Net mit WSSecurityTokenSerializer.

Ich habe die Schlüssel-Kette und SAML XML, trotz ein paar Fragen.

Ersten bekomme ich die SAML-assertion von dem HTTPS-POST:

//spec says "SAMLResponse=" 
string rawSamlData = Request["SAMLResponse"];

//read the base64 encoded bytes
byte[] samlData = Convert.FromBase64String(rawSamlData);

//read back into a UTF string
string samlAssertion = Encoding.UTF8.GetString(samlData);

//get the SAML data in an XML reader
var assertionPostStream = new StringReader(samlAssertion);
var reader = XmlReader.Create(assertionPostStream);

Dann bekomme ich den Schlüssel von meinem IdP:

//get the key data
byte[] certificateData = System.IO.File.ReadAllBytes("myKeys.p7b");

//decode the keys
var cms = new SignedCms(SubjectIdentifierType.IssuerAndSerialNumber);
cms.Decode(certificateData);

//we have a keychain of X509Certificate2s, we need a collection of tokens
var certificatesAsTokens =
    from X509Certificate2 cert in cms.Certificates
    select new X509SecurityToken(cert) as SecurityToken;

//get a token resolver
var tokens = new ReadOnlyCollection<SecurityToken>(
    certificatesAsTokens.ToList());
var resolver = SecurityTokenResolver.CreateDefaultSecurityTokenResolver(
    tokens, true);

Schließlich bekomme ich einen Fehler geworfen hier:

//use the WS Security stuff to parse the reader
var securityToken = WSSecurityTokenSerializer.
    DefaultInstance.ReadToken(reader, resolver) as SamlSecurityToken;

Beim aufrufen der ReadToken bekomme ich die folgende Fehlermeldung:

Nicht Lesen kann, wird das token aus der "Antwort" - element mit der 'urn:oasis:names:tc:SAML:2.0:protocol" Namensraum für BinarySecretSecurityToken, mit einem " ValueType. Wenn dieses element erwartet wird, um gültig zu sein, sicherzustellen, dass die Sicherheit konfiguriert ist, zu konsumieren-Token mit Namen, namespace und dem Wert-Typ angegeben.

Meine SAML XML beginnt mit:

<Response xmlns="urn:oasis:names:tc:SAML:2.0:protocol" ...

Also klar habe ich ein Response element in der urn:oasis:names:tc:SAML:2.0:protocol namespace.

Irgendeine Idee, was falsch ist/fehlt hier?

  • Nach Tagen der Graben (die Dokumentation dieses Zeug ist schrecklich) ich denke, dass dies möglicherweise aufgrund WSSecurityTokenSerializer sich auf eine Variante der SAML 1.1-eher als SAML-2.0 - I ' ve eingeschaltet, um zu versuchen, um zu überprüfen, die Signatur direkt: stackoverflow.com/questions/6126388
InformationsquelleAutor Keith | 2011-05-24
Schreibe einen Kommentar