Frage

Gibt es eine Möglichkeit zu ziehen Informationen über Zertifikat des Client verwendet wurde innerhalb meiner Web-Service-Methode, wenn <security mode="Transport> verwenden? Ich durch OperationContext.Current gesiebten konnte aber nichts offensichtlich finden.

Meine Serverkonfiguration ist wie folgt:

  <basicHttpBinding>
    <binding name="SecuredBasicBindingCert">
      <security mode="Transport">
        <message clientCredentialType="Certificate" />
      </security>
    </binding>
  </basicHttpBinding>

Ich arbeite mit einem Dritten Pub / Sub-System, die leider Datapower für die Authentifizierung verwendet wird. Es scheint, als ob ich mit WCF mit dieser Konfiguration, dann bin ich nicht in der Lage keine Informationen über den Anrufer zu sammeln (da keine Zugangsdaten tatsächlich gesendet werden).

Ich muß irgendwie in der Lage sein, deren herauszufinden, Anrufe zu meinem Dienst machen, ohne meine Konfiguration zu ändern oder fragen sie ihre Nutzlast zu ändern.

War es hilfreich?

Lösung

Ja, aber es ist nicht intuitiv.

Sie zunächst sicher, und verweisen auf die System.IdentityModel Montage von Ihrem Service-Bibliothek.

Nun fügen Sie etwas Ähnliches wie folgt auf Ihre Service-Methode, wo Sie über die Client-Zertifikat wissen möchten:

// Find the certificate ClaimSet associated with the client
foreach (ClaimSet claimSet in OperationContext.Current.ServiceSecurityContext.AuthorizationContext.ClaimSets)
{
    X509CertificateClaimSet certificateClaimSet = claimSet as X509CertificateClaimSet;
    if (certificateClaimSet != null)
    {
        // We found the ClaimSet, now extract the certificate
        X509Certificate2 certificate = certificateClaimSet.X509Certificate;

        // Do something interesting with information contained in the certificate
        Debug.Print("Certificate Subject: " + certificate.Subject);
    }
}

Hope, das hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top