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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es aussieht, erhalten Sie eine SAML2 Antwort. Zwar gibt es Unterstützung für SAML2 bei .NET 4.5 gibt es leider nur Unterstützung für die Behauptungen - nicht auf das Protokoll selbst (einschließlich der Antwort-Nachricht).
Verarbeiten SAML2 Antwort in .Hast du NET zu:
Saml2SecurityTokenHandler.ReadToken()
.Saml2SecurityTokenHandler.DetectReplayedToken()
.Saml2SecurityTokenHandler.ValidateConditions()
Saml2SecurityTokenHandler.CreateClaims()
erstellen Sie eine anspruchsbasierte Identität.Leider sind die meisten dieser Methoden sind geschützt, aber Sie können eine Unterklasse
Saml2SecurityTokenHandler
und erhalten Zugang zu Ihnen.Ein komplettes Beispiel finden Sie in der Saml2Response Klasse in der Sustainsys.Saml2 Projekt.
FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers
. Siehe stackoverflow.com/questions/28845076/...