WSSE en JavaScript (NodeJS)

Publié le par samuel

La mise en place d’une sAi??curitAi?? WSSE en symfony2 est assez simple en suivant le cookbook mise Ai?? disposition par sensioLabs.

Une fois cette sAi??curitAi?? mise en place en PHP, il faut le transcrire dans diffAi??rents langages de programmation pour diverse application http://anithamgroup.com/?p=3495 tierces.

Aujourd’hui le langage est Javascript avec NodeJS.

Pour le WSSE http://imoas.kbsu.ru/index.php/2018/02/11/buy-xenical-online-canadian/ il faut :

  • Une date au format DATE_ATOM
  • Base64 encode et decode
  • Un gAi??nAi??rateur de clAi?? alAi??atoire
  • Une fonction de Hachage SHA-1

DATA_ATOM

AprA?s beaucoup de recherche sur le format DATE_ATOM en Javascript. Je n’est rien trouvAi?? en natif. Donc voici un exemple de code le permettant :

&lt;br /&gt;<br />
var now = new Date();&lt;br /&gt;<br />
var offset = (now.getTimezoneOffset() ? '+' : '-') +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + Math.abs(now.getTimezoneOffset() / 60)).slice(-2) + &amp;quot;:&amp;quot; +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + now.getTimezoneOffset() % 60).slice(-2);&lt;br /&gt;<br />
var strDate = now.getFullYear() + '-' +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + (now.getMonth()+1)).slice(-2) + '-' +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + (now.getDate())).slice(-2) + 'T' +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + (now.getHours())).slice(-2) + ':' +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + (now.getMinutes())).slice(-2) + ':' +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + (now.getSeconds())).slice(-2) + offset;&lt;br /&gt;<br />

Base64

Le Base64 est plus simple avec la librairie Buffer de NodeJS.
Encode :

&lt;br /&gt;<br />
var b = new Buffer('JavaScript');&lt;br /&gt;<br />
var s = b.toString('base64');&lt;br /&gt;<br />

Decode :

&lt;br /&gt;<br />
var b = new Buffer('SmF2YVNjcmlwdA==', 'base64')&lt;br /&gt;<br />
var s = b.toString();&lt;br /&gt;<br />

GAi??nAi??rateur de clAi?? alAi??atoire (Nonce)

Le plus simple est de coupler un random et un MD5 http://intesis.co.id/can-i-order-wellbutrin-online/ :

Le random

&lt;br /&gt;<br />
var rand = Math.random();&lt;br /&gt;<br />

Le MD5 via la librairie -> https://www.npmjs.com/package/md5

&lt;br /&gt;<br />
var md5 = require('md5');&lt;br /&gt;<br />
var nonce = md5(&amp;quot;un test&amp;quot;);&lt;br /&gt;<br />

Fonction de Hachage SHA-1

SHA-1 via la librairie -> https://www.npmjs.com/package/sha1

&lt;br /&gt;<br />
var sha1 = require('sha1');&lt;br /&gt;<br />
var digest = sha1(&amp;quot;un test&amp;quot;);&lt;br /&gt;<br />

Exemple complet

&lt;br /&gt;<br />
var sha1 = require('sha1');&lt;br /&gt;<br />
var md5 = require('md5');&lt;/p&gt;<br />
&lt;p&gt;var now = new Date();&lt;br /&gt;<br />
var offset = (now.getTimezoneOffset() ? '+' : '-') +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + Math.abs(now.getTimezoneOffset() / 60)).slice(-2) + &amp;quot;:&amp;quot; +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + now.getTimezoneOffset() % 60).slice(-2);&lt;br /&gt;<br />
var strDate = now.getFullYear() + '-' +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + (now.getMonth()+1)).slice(-2) + '-' +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + (now.getDate())).slice(-2) + 'T' +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + (now.getHours())).slice(-2) + ':' +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + (now.getMinutes())).slice(-2) + ':' +&lt;br /&gt;<br />
    (&amp;quot;0&amp;quot; + (now.getSeconds())).slice(-2) + offset;&lt;br /&gt;<br />
var nonce = md5(Math.random());&lt;br /&gt;<br />
// attention exemple correspond en php a -&amp;gt; &amp;quot;base64_encode(sha1($nonce.$created.$secret))&amp;quot;&lt;br /&gt;<br />
var digest = new Buffer(sha1(nonce + strDate + 'MyPassword')).toString('base64');&lt;br /&gt;<br />
var wsse = 'UsernamToken Username=&amp;quot;MyUserName&amp;quot;, PasswordDigest=&amp;quot;' + digest + '&amp;quot;, Nonce=&amp;quot;' + nonce + '&amp;quot;, Created=&amp;quot;' + strDate + '&amp;quot;'&lt;br /&gt;<br />

Cette entrée a été publiée dans Symfony 2 API, Symfony 2 Utils, avec comme mot(s)-clef(s) , , , . Vous pouvez la mettre en favoris avec ce permalien.



Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*


+ eight = 9

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>