2

Quelqu'un peut-il me diriger dans la bonne direction de la façon dont je peux utiliser des certificats SSL côté client avec Silverlight pour accéder à un service Web reposant?Silverlight et SSL Client Certificates

Je n'arrive pas à trouver quoi que ce soit sur la façon de les gérer, ou même si elles sont supportées.

Cheers.

Répondre

1

Slipjig mentionné ceci:

« La pile de navigateur fait, et à peu près automatiquement, si vous sommes prêts à vivre avec ses autres limitations (manque de support pour tous les verbes HTTP, coercition des codes de statut de réponse, etc.). "

Si cela est acceptable pour vous, regardez comment Microsoft se faire face à cela dans certaines de leurs API en utilisant l'en-tête X-HTTP Méthode personnalisée, comme la façon dont ils le font pour WCF et OData:

http://www.odata.org/developers/protocols/operations

dans MSDN, Microsoft mentionne également sur l'utilisation de ce REST conjointement avec base de SharePoint 2010 WCF REST API:

msdn.microsoft.com/en-us/library/ff798339.aspx

« dans la pratique, beaucoup de firew alls et autres intermédiaires réseau bloquent les verbes HTTP autres que GET et POST. Pour contourner ce problème, les services de données WCF (et le standard OData) prennent en charge une technique connue sous le nom de «tunneling verbe». Dans cette technique, les demandes PUT, DELETE et MERGE sont soumises en tant que demande POST et un en-tête X-HTTP-Method spécifie le verbe réel que le destinataire doit appliquer à la demande. Pour plus d'informations, consultez X-HTTP-Method sur MSDN et OData: Operations (la section Method Tunneling through POST) sur le site Web OData. "

Don Box avait également quelques mots à ce sujet, mais concernant spécifiquement GData:

www.pluralsight-training.net/community/blogs/dbox/archive/2007/01/16/45725.aspx

« Si je devais construire un client GData, je me demande sincèrement pourquoi je pris la peine de l'aide Les méthodes DELETE et PUT du tout étant donné que X-HTTP-Method-Override va fonctionner dans plus de cas/déploiements."

Il y a un article sur Silverlight et Java Interop qui aborde également cette limitation de Silverlight en donnant le même conseil:

www.infoq.com/articles/silverlight-java-interop

" Supports Silverlight seulement les méthodes HTTP GET et POST. Certains pare-feu restreignent l'utilisation des méthodes HTTP PUT et DELETE. Il est important de signaler que le véritable service RESTful peut être créé (en respectant tous les principes REST listés ci-dessus) en utilisant uniquement les méthodes HTTP GET et POST, en d'autres termes l'architecture REST ne nécessite pas de mappage spécifique vers HTTP . L'en-tête GData X-Http-Method-Override de Google est un exemple de cette approche.

Les méthodes HTTP suivantes overrides peuvent être définies dans l'en-tête pour accomplir la PUT et DELETE actions si les services Web interprètent l'en-tête Méthode HTTP-X-Override sur un POST:

* X-HTTP-Method-Override: PUT 
* X-HTTP-Method-Override: DELETE" 

Hope this helps -Josh

1

Cela dépend si vous utilisez la pile HTTP du navigateur ou la pile HTTP client. La pile client ne prend pas en charge les certificats client, point. La pile du navigateur le fait, et à peu près automatiquement, si vous êtes prêt à vivre avec ses autres limitations (manque de support pour tous les verbes HTTP, coercition des codes de statut de réponse, etc.).

J'ai cependant rencontré un problème en utilisant la pile du navigateur avec des certificats clients dans un scénario OOB. Le chargement du module Prism échoue dans ces conditions: la requête parvient à IIS, mais provoque une erreur de 500 serveurs sans raison apparente. Si je mets IIS pour ignorer certs client, ou si je lance l'application dans le navigateur, il fonctionne très bien: -/

0
Dim url As Uri = New Uri(Application.Current.Host.Source, "../WebService.asmx") 
Dim binding As New System.ServiceModel.BasicHttpBinding 
If url.Scheme = "https" Then 
    binding.Security.Mode = ServiceModel.BasicHttpSecurityMode.Transport 
End If 

binding.MaxBufferSize = 2147483647 'this value set to override a bug, 
binding.MaxReceivedMessageSize = 2147483647 'this value set to override a bug, 
Dim proxy As New ServiceReference1.WebServiceSoapClient(binding, New ServiceModel.EndpointAddress(url)) 
proxy.InnerChannel.OperationTimeout = New TimeSpan(0, 10, 0)