Exemple de requête SOAP authentifiée avec WS-UsernameToken
j'essaie d'authentifier une requête SOAP en utilisant WS-Usernametametoken spec, mais le périphérique cible refuse toujours l'accès. Ma requête qui ne fonctionne pas ressemble à ça. (Le mot de passe je suis en train de hachage est system
.)
<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope">
<Header>
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<UsernameToken>
<Username>root</Username>
<Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">EVpXS/7yc/vDo+ZyIg+cc0fWdMA=</Password>
<Nonce>tKUH8ab3Rokm4t6IAlgcdg9yaEw=</Nonce>
<Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2010-08-10T10:52:42Z</Created>
</UsernameToken>
</Security>
</Header>
<Body>
<SomeRequest xmlns="http://example.ns.com/foo/bar" />
</Body>
</Envelope>
ce que je cherche est un exemple de requête similaire, mais avec un token d'authentification qui fonctionne réellement. Par exemple, si vous avez une application gSOAP qui utilise ces Tokens, et que vous pouvez générer une requête et afficher le résultat ici, je vous en serais très reconnaissant.
4 réponses
la chose principale est de définir les préfixes pour les espaces de noms et de les utiliser pour fortifier chaque étiquette - vous mélangez 3 espaces de noms et cela ne fonctionne tout simplement pas en essayant de hacker les valeurs par défaut. Il est également bon d'utiliser exactement les préfixes utilisés dans le ne C-juste au cas où l'autre côté soit un peu négligé.
Dernier point mais non le moindre, c'est beaucoup mieux d'utiliser des types par défaut pour les champs à chaque fois que vous pouvez - donc, pour le mot de passe que vous avez à la liste le type, pour l'Instant c'est déjà Base64.
assurez-vous de vérifier que le token généré est correct avant de l'envoyer via XML et n'oubliez pas que le contenu de wsse:Password est Base64( SHA-1 (nonce + created + password) ) et que la date-heure dans wsu:Created peut facilement vous embrouiller. Ainsi, une fois que vous fixez les préfixes et les espaces de noms et vérifiez que votre SHA-1 fonctionne correctement sans XML (imaginez que vous validez la requête et faites le côté serveur du calcul SHA-1), vous pouvez également faire un wihtout truial créé et même sans Nonce. Oh et Nonce peuvent avoir des encodages différents donc si vous voulez vraiment forcer un autre encodage, vous devrez regarder plus loin dans l'Espace-nom wsu.
<S11:Envelope xmlns:S11="..." xmlns:wsse="..." xmlns:wsu= "...">
<S11:Header>
...
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>NNK</wsse:Username>
<wsse:Password Type="...#PasswordDigest">weYI3nXd8LjMNVksCKFV8t3rgHh3Rw==</wsse:Password>
<wsse:Nonce>WScqanjCEAC4mQoBE07sAQ==</wsse:Nonce>
<wsu:Created>2003-07-16T01:24:32</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
...
</S11:Header>
...
</S11:Envelope>
Hashez la prise en charge des mots de passe et les paramètres D'Assertion des tokens dans Metro 1.2 explique très bien à quoi ressemble un UsernameToken avec un mot de passe Digest:
Digest De Mot De Passe
WSS 1.1 Identifiant du Jeton Profil permet aux mots de passe digest de être envoyé dans un
wsse:UsernameToken
d'un Message du SOAP. Deux autres en option les éléments sont inclus dans lewsse:UsernameToken
dans ce cas:wsse:Nonce
etwsse:Created
. Un nonce est une valeur aléatoire que le expéditeur crée à inclure dans chaque Élément usernametoken qu'il envoie. Un le temps de création est ajouté à combiner nonces à une "fraîcheur" période de temps. Le hachage de Mot de passe dans ce cas est calculé comme suit:Password_Digest = Base64 ( SHA-1 ( nonce + created + password ) )
C'est ainsi qu'un utilisateur dit avec Le mot de passe Digest ressemble à:
<wsse:UsernameToken wsu:Id="uuid_faf0159a-6b13-4139-a6da-cb7b4100c10c"> <wsse:Username>Alice</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">6S3P2EWNP3lQf+9VC3emNoT57oQ=</wsse:Password> <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">YF6j8V/CAqi+1nRsGLRbuZhi</wsse:Nonce> <wsu:Created>2008-04-28T10:02:11Z</wsu:Created> </wsse:UsernameToken>
Vérifier celui-ci (Mot de passe mot de passe):
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-6138db82-5a4c-4bf7-915f-af7a10d9ae96">
<wsse:Username>user</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">CBb7a2itQDgxVkqYnFtggUxtuqk=</wsse:Password>
<wsse:Nonce>5ABcqPZWb6ImI2E6tob8MQ==</wsse:Nonce>
<wsu:Created>2010-06-08T07:26:50Z</wsu:Created>
</wsse:UsernameToken>
Peut-être ce post ( Secure Metro JAX-WS UsernameToken Web Service with Signature, Encryption and TLS (SSL)) fournit plus de perspicacité. Comme ils l'ont mentionné "rappelez-vous, à moins que le mot de passe texte ou mot de passe digéré est envoyé sur un canal sécurisé ou le jeton est crypté, ni mot de passe digest ni mot de passe cleartext n'offre une réelle sécurité supplémentaire. "