2012-03-26 18 views
5

Ich muss ein SAML-Token mit benutzerdefinierten Daten erstellen.Erstellen eines benutzerdefinierten SAML-Tokens

Es ist ein gut aussehendes Beispiel auf MSDN aber es kompiliert nicht ....

Hat jemand bekommt smt darüber Arbeitsprobe zu lesen?

Oder fügen Sie nur neue Behauptungen zur Assertion-Sammlung hinzu? Muss ich sie in Verbundmetadaten beschreiben? Welche anderen Fragen sollte ich tun? Wäre froh, irgendeine Hilfe zu sehen.

Antwort

12

Ich erinnere mich, dass es in einem der ACS-Samples einen benutzerdefinierten SAML-Token-Generierungscode gibt. Das wäre ein guter Anfang. Sie können es herunterladen here, suchen Sie nach dem OAuth2CertificateSample, SelfSignedSaml2TokenGenerator.cs. Der Code sieht folgendermaßen aus:

/// <summary> 
/// Creates a SAML assertion signed with the given certificate. 
/// </summary> 
public static Saml2SecurityToken GetSamlAssertionSignedWithCertificate(String nameIdentifierClaim, byte[] certificateWithPrivateKeyRawBytes, string password) 
{ 
    string acsUrl = string.Format(CultureInfo.InvariantCulture, "https://{0}.{1}", SamplesConfiguration.ServiceNamespace, SamplesConfiguration.AcsHostUrl); 

    Saml2Assertion assertion = new Saml2Assertion(new Saml2NameIdentifier(nameIdentifierClaim)); 

    Saml2Conditions conditions = new Saml2Conditions(); 
    conditions.NotBefore = DateTime.UtcNow; 
    conditions.NotOnOrAfter = DateTime.MaxValue; 
    conditions.AudienceRestrictions.Add(new Saml2AudienceRestriction(new Uri(acsUrl, UriKind.RelativeOrAbsolute))); 
    assertion.Conditions = conditions; 

    Saml2Subject subject = new Saml2Subject(); 
    subject.SubjectConfirmations.Add(new Saml2SubjectConfirmation(Saml2Constants.ConfirmationMethods.Bearer)); 
    subject.NameId = new Saml2NameIdentifier(nameIdentifierClaim); 
    assertion.Subject = subject; 

    X509SigningCredentials clientSigningCredentials = new X509SigningCredentials(
      new X509Certificate2(certificateWithPrivateKeyRawBytes, password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable)); 

    assertion.SigningCredentials = clientSigningCredentials; 

    return new Saml2SecurityToken(assertion); 
} 

Außerdem erfordert der Authentifizierungsprozess keine ausgegebenen Ansprüche, die in Verbundmetadaten beschrieben werden. Die in Föderationsmetadaten veröffentlichten Ansprüche sind nur Hinweise für den Tokenverbraucher, was er in dem ausgestellten Token erwartet.

+0

Danke für eine interessante Lösung! –

+0

Genau wie ich dachte, war das einzige Problem, das ich in meinem Code hatte vergessen, die SigningCredentials zu setzen. Tolles Snippit. Viel Liebe. – Eon

+0

Neuer ACS-Downloadpfad: https://code.msdn.microsoft.com/Windows-Azure-AD-Access-0dcde385 – fiat

Verwandte Themen