Informations sur le certificat de service WCF en utilisant le mode de sécurité Transport

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

  •  05-10-2019
  •  | 
  •  

Question

Est-il possible à l'information de traction dont le certificat client a été utilisé à l'intérieur de ma méthode de service Web lors de l'utilisation <security mode="Transport>? Je OperationContext.Current passé au crible, mais n'a pas pu trouver quelque chose d'évident.

Ma configuration du serveur est comme suit:

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

Je travaille avec un pub / sous-système tiers qui est malheureusement utilise DataPower pour l'authentification. Il semble que si j'utilise WCF avec cette configuration, je suis incapable de glaner des informations sur l'appelant (car aucune information d'identification sont réellement envoyés).

Je dois en quelque sorte d'être en mesure de comprendre dont les appels à mon service sans changer ma configuration ou en leur demandant de changer leur charge utile.

Était-ce utile?

La solution

Oui, mais il est peu intuitive.

Tout d'abord, assurez-vous et référence le montage System.IdentityModel de votre bibliothèque de services.

Maintenant, ajoutez quelque chose de similaire qui suit à votre méthode de service où vous souhaitez savoir sur le certificat 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);
    }
}

Hope this helps!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top