Heim >Backend-Entwicklung >C++ >Wie kann ich mit C# eine SAML-Assertion in einer SOAP-Nachricht generieren und digital signieren?

Wie kann ich mit C# eine SAML-Assertion in einer SOAP-Nachricht generieren und digital signieren?

DDD
DDDOriginal
2025-01-18 06:36:13837Durchsuche

How to Generate and Digitally Sign a SAML Assertion within a SOAP Message using C#?

Dieser C#-Code demonstriert das Generieren einer SAML-Assertion, das digitale Signieren dieser und das Einbetten in eine SOAP-Nachricht. Lassen Sie uns die Funktionalität des Codes Schritt für Schritt untersuchen:

SOAP-Nachrichtenerstellung (CreateSoapMethode):

Die CreateSoap-Methode erstellt das grundlegende SOAP-Nachrichten-Framework. Dazu gehört die Erstellung der SOAP-Hülle, des Headers und des Bodys. Wichtige Elemente wie die To- und Action-Adressen, MessageID und der wsse:Security-Header werden hinzugefügt. Der wsse:Security-Header fungiert als Platzhalter für die später hinzugefügte, signierte SAML-Assertion.

SAML-Assertion-Signierung (SignXmlWithCertificateMethode):

Die SignXmlWithCertificate-Methode übernimmt den digitalen Signaturprozess für die SAML-Behauptung. Als Eingabe werden das Assertion-Element und ein X509Certificate2-Objekt verwendet. Der Signiervorgang umfasst:

  1. Erstellen eines SignedXml-Objekts, initialisiert mit dem Assertion-Element.
  2. Festlegen der SigningKey-Eigenschaft von SignedXml auf den privaten Schlüssel des Zertifikats.
  3. Erstellen eines Reference-Objekts und Hinzufügen zu SignedXml. Die Referenz verweist auf die zu signierenden Daten (hier eine leere Zeichenfolge, die die gesamte Behauptung angibt).
  4. Erstellen eines KeyInfo-Objekts und Hinzufügen einer KeyInfoX509Data-Klausel, die das Zertifikat enthält.
  5. Berechnen der Signatur mit ComputeSignature und Abrufen ihrer XML-Darstellung über GetXml.
  6. Anhängen der XML-Signatur an das Behauptungselement.

Betreffelementerstellung (CreateSubjectMethode):

Die Methode CreateSubject fügt das Element <subject> zur SAML-Behauptung hinzu. Dieses Element enthält themenbezogene Informationen, wie z. B. Name und Bestätigungsmethode. In diesem Beispiel sind die Betreffdetails fest codiert.

Integration: Signierte Behauptung und SOAP-Anfrage:

Nach der Signierung und Betrefferstellung wird die signierte Behauptung in den wsse:Security-Header integriert. Der SOAP-Körper, der derzeit Platzhalterdaten enthält, kann durch die tatsächliche SOAP-Nutzlast ersetzt werden.

Speichern des signierten XML:

Abschließend wird das vollständige, digital signierte XML-Dokument in einer Datei gespeichert.

Anwendung:

Um diesen Code zu verwenden:

  1. Ersetzen Sie den Zertifikatspfad (pfxpath) durch den Pfad zu Ihrem Zertifikat.
  2. Stellen Sie sicher, dass der SOAP-Körper (xmlBytes) die richtige XML-Anfrage enthält.
  3. Führen Sie das Programm aus.

Die resultierende XML-Datei enthält die digital signierte SAML-Behauptung, die in die SOAP-Nachricht eingebettet ist. Diese Ausgabe kann zur Authentifizierung oder Autorisierung mit einem Remote-System verwendet werden.

Das obige ist der detaillierte Inhalt vonWie kann ich mit C# eine SAML-Assertion in einer SOAP-Nachricht generieren und digital signieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn