Informazioni sul certificato da WCF Service utilizzando modalità di sicurezza per il trasporto

StackOverflow https://stackoverflow.com/questions/2923449

  •  05-10-2019
  •  | 
  •  

Domanda

C'è un modo per tirare le informazioni su quale certificato client è stato utilizzato all'interno del mio metodo di servizio Web quando si utilizza <security mode="Transport>? Ho setacciato attraverso OperationContext.Current ma non ho trovato nulla evidente.

configurazione Il server è la seguente:

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

sto lavorando con un sistema di pub / sub terzo che purtroppo utilizza DataPower per l'autenticazione. Sembra come se sto usando WCF con questa configurazione, allora io sono in grado di raccogliere tutte le informazioni relative al chiamante (dal momento che non sono in realtà le credenziali inviate).

in qualche modo bisogno di essere in grado di capire la cui effettuare le chiamate al mio servizio senza cambiare la mia configurazione o chiedere loro di cambiare il loro carico utile.

È stato utile?

Soluzione

Sì, ma è poco intuitivo.

In primo luogo, essere sicuri e fanno riferimento alla System.IdentityModel assembly dalla libreria del servizio.

Ora, aggiungere qualcosa di simile alla seguente al metodo di servizio in cui si desidera sapere sul certificato client:

// 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);
    }
}

Spero che questo aiuti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top