Pregunta

¿Hay alguna manera a la información de tracción sobre el cual certificado de cliente se utiliza dentro de mi método de servicio Web cuando se utiliza <security mode="Transport>? Me tamizado a través de OperationContext.Current pero no pude encontrar nada obvio.

Mi configuración del servidor es la siguiente:

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

Estoy trabajando con un sistema de pub / sub tercero que es, por desgracia utilizando DataPower para la autenticación. Parece como si estoy usando WCF con esta configuración, entonces yo soy incapaz de recoger alguna información acerca de la persona que llama (ya que no hay credenciales se enviaron realmente).

De alguna manera que ser capaz de averiguar que la realización de llamadas a mi servicio sin cambiar mi configuración o pidiéndoles que cambiar su carga útil.

¿Fue útil?

Solución

Sí, pero es poco intuitivo.

En primer lugar, asegúrese y hacer referencia a la System.IdentityModel montaje de la biblioteca de servicio.

Ahora, añadir algo similar lo siguiente a su método de servicio donde le gustaría saber sobre el certificado de cliente:

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

Espero que esto ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top