Fil d’Ariane du forum – Vous êtes ici :ForumForums techniques: AS/400web services basés sur SQL
Vous devez vous identifier pour créer des messages et des sujets.

web services basés sur SQL

Bonjour,

Comment géré une authentification basic sur un WS basés sur SQL ?

Sur un WS basés sur un programme je n'ai pas ce pb car je gère l'authentification dans mon programme ...

Merci d'avance.

 

Peut être des réponses dans ce document :

Fichiers téléversés :

Bonjour

je suppose que tu parles d'un web service client.

pour faire de l'authentification basic il te faut encoder le profil et le mot de passe en base 64

Attention il tout convertir en ascii avec l'encodage

exemple de code:

 

dcl-s Authorization varchar(600);

dcl-s headerhttp varchar(1000);

dcl-s fic_csv sqltype(blob_file);

dcl-s urlname varchar(2000) ;

// Ascii est une fonction interne qui convertie dans la page code spéfiée (1252 ici) via apiconv

Authorization=ascii(%trimr(id)+':'+%trim(password):1252);

// encodeage base64

exec sql
values(systools.base64encode(:Authorization)) into :Authorization;

 

// composition du Header Http

headerhttp='<httpHeader><header name="Authorization" value="Basic '+Authorization+'"/></httpHeader>';

//envoi de la requête  a l'url contenu dans la variable urlname, et récupération du résultat dans un blob_file

exec sql
values(SYSTOOLS.HTTPGETBLOB(:urlname, cast(:headerhttp as clob(1k)))) into :fic_csv;

 

pour info voici le code de la fonction Ascii

//============================================================================================
dcl-Proc Ascii export;

dcl-pi ascii varchar(1000000) rtnparm;
Ebcdic varchar(1000000) value;
ccsid$ int(5) const;
end-pi;

dcl-s ptrin  pointer;
Dcl-s p_Bufout  pointer;
Dcl-s BufInsize uns(10);
Dcl-s BufOutsize uns(10);
Dcl-s rc uns(10);
Dcl-s bufout  char(1000000);
dcl-s car char(1) based(ptr_car);

Dcl-ds ToAscii;
ICORV_A  bindec(9);
ICOC_A   bindec(9) DIM(00012);
end-ds;
//
Dcl-ds dsFROM;
from_ccsid int(10) Inz(0);
from_ca int(10) Inz(0);
from_Sa int(10) Inz(0);
from_ss int(10) Inz(1);
from_il int(10) Inz(0);
from_E0 int(10) Inz(1);
from_r  char(8) INZ(*allx'00');
end-ds;

dcl-ds dsTO;
To_ccsid int(10);
To_ca int(10) Inz(0);
To_Sa int(10) Inz(0);
To_ss int(10) Inz(1);
To_il int(10) Inz(0);
To_E0 int(10) Inz(1);
To_r  char(8) INZ(*allx'00');
end-ds;

Dcl-pr IConvOpen   char(52)   ExtProc('QtqIconvOpen');
*n pointer  Value options(*string); //            To Code
*n pointer Value options(*string); //Fr Code
end-pr;

Dcl-pr IConv int(10) ExtProc('iconv');
*n Char(52) Value; // Code Discripter
*n pointer  value; // ptr to InBuffer Ptr
*n uns(10); // inSize ptr
*n pointer value; // ptr to OutBuffer Pt
*n uns(10); // OutSize ptr
end-pr;

Dcl-pr IConvClose  int(10)  ExtProc('iconv_close');
*n char(52) Value;
end-pr;

To_ccsid=ccsid$;

ToAscii=IConvOpen(%addr(dsTo):%addr(dsFROM));
ptrin=%addr(Ebcdic:*data);
bufInsize=%len(Ebcdic);
bufout='';
BufOutsize=%size(bufout);
p_bufout=%addr(bufout);
rc=iconv(ToAscii:%addr(ptrin):bufinsize:%addr(p_bufout):bufOutsize);
iconvclose(ToAscii);

return %subst(bufout:1:%size(bufout)-bufOutsize);
end-proc;

 

 

 

 

 

 

 

 

 

 

 

En fait mon pb n'est pas de consommer un WS avec une authentification basic ça c'est ok

Mon pb c'est de fournir un WS avec une authentification basic en le déployant via une requête sql (voir Pause-café n° 82 )

Fichiers téléversés :
  • sql.PNG

Bonjour

regarde ce pdf

https://www.2018.universite-i.fr/presentation_fichier/s38-deploiement-et-securisation-des-services-web-sous-ibm-i.pdf

Cdlt

 

 

Merci - je pense que la solution est dans cette doc ….