7
votes

Connexion au service Web SAP à partir d'une application C # .NET

J'ai écrit une application Windows pour tester une connexion à un service Web SAP des clients. L'appel de service Web nécessite une sécurité de certificat X509.

Après avoir lu divers articles sur Internet, j'ai proposé trois façons de joindre le certificat X509 à l'appel de service Web. Malheureusement, toutes ces tentatives renvoient un "401 accès non autorisé". Cependant, je peux me connecter au service Web via l'URL dans IE. P>

Quelqu'un a-t-il des sugestions sur ce que je fais peut-être mal? J'utilise WSE 3.0 et les trois méthodes que j'utilise pour attacher le certificat sont les suivantes: - p>

certificat p> xxx pré>

jeton p> xxx pré>

stratégie p> xxx pré>

getsecurityToken () et getecuirtycertificate à la fois recherchées dans le magasin de certificats. Le SAPX509ASSERTION fait ceci: - P>

binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;


2 commentaires

ZFHHRGBBAPIZGEAMSCreatASResponse ... Mes yeux ...


Je sais! Pas le plus convivial des conventions de dénomination.


4 Réponses :


-2
votes

Votre certificat peut-il être mappé sur un utilisateur valide de votre utilisateur?


2 commentaires

Le certificat a été généré par les gars à l'extrémité SAP des choses, mais je dois assumer la réponse comme si le certificat est utilisé et utilisé avec succès par IE.


S'il vous plaît demander aux commentaires à la question, ne postez pas de questions en réponse.



4
votes

Maintenant, tout ira de ma propre expérience de sorte que certains d'entre elles peuvent être fausses, mais voici comment je comprends le processus (je n'ai reçu aucune documentation et mon entreprise n'avait aucune expérience de l'appelant SAP avant que je ne commence à le faire). < P> Les appels SAP WS ne sont pris en charge que par WCF BasichttpLinding, et autant que je sache, n'utilisez que des informations d'identification en texte brut. Cela signifie que vous voudrez utiliser IPSec ou HTTPS si vous devez effectuer votre communication privée (intranet extérieure ou données sensibles dans Intranet). Notre serveur SAP n'a pas configuré HTTPS, mais nous utilisons VPN avec IPSec pour une communication externe. Il est important de noter que, par défaut, SAP GUI ne rend pas non plus la communication privée. Dans cette situation, vous n'êtes pas moins sûr en utilisant la méthode détaillée ci-dessous que l'utilisateur de l'entreprise dans la salle qui recueille des données sensibles dans GUI 7.1. Voici comment je me connecte à notre serveur SAP en interne: xxx

Autant que j'ai pu déterminer, la sécurité au niveau du message n'est pas prise en charge et des liaisons autres que BasichttpLinding (Savon 1.1) ne sont pas pris en charge.

Comme je l'ai dit, tout ira de l'expérience et non de la formation, donc si quelqu'un peut ajouter quelque chose à travers des commentaires, s'il vous plaît le faire.


2 commentaires

En outre, l'exemple que j'ai publié utilise des liaisons créées de manière dynamique qui désactivera la mise en cache de cychandie. Si quelqu'un utilise cet exemple de production, veuillez garder cela à l'esprit.


J'utilisais le processus WSE3.0 mais je vais examiner la réécriture à l'aide de WCF et de votre exemple ci-dessus.



2
votes

J'ai fait face au même problème et il semble que j'ai trouvé la Sollution ici: http://ddkonline.blogspot.com/2009/08/calling-sap-pi-web-service-utilisateur-wcf.html .

        CustomBinding binding = new CustomBinding();
        binding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8));
        HttpsTransportBindingElement transport = new HttpsTransportBindingElement();
        transport.AuthenticationScheme = AuthenticationSchemes.Basic;
        //transport.ProxyAuthenticationScheme = AuthenticationSchemes.Basic;
        transport.Realm = "XISOAPApps";
        binding.Elements.Add(transport);
        var address = new EndpointAddress("https://foooo");
        ........ create client proxy class


        service.ClientCredentials.UserName.UserName = "<login>";
        service.ClientCredentials.UserName.Password = "<password>";


0 commentaires

-1
votes

Après tout ce temps, le client a finalement obtenu quelqu'un à faire face à la question de leur extrémité de SAP. Indiquez les fichiers WSDL que nous avons été fournis étaient incorrects et la certification avait été faite mal. Je réran mon code avec les nouveaux fichiers WSDL et cela a fonctionné pour la première fois.


1 commentaires

Ce n'est pas une réponse. Vous devez supprimer votre question, car cela n'aide à personne.