Delphi THTTPRIO Spring Security Sorunu

Yapmak istediğiniz işle ilgili doğru bileşeni bulmak için burayı kullanabilirsiniz. Sadece bulmak için, diğer sorular Programlama forumuna lütfen.
Forum kuralları
Bu forum sadece yapacağınız işle alakalı doğru bileşeni bulmak içindir. Şöyle bir şey yapmam lazım, hangi bileşeni kullanıyım diyorsanız, doğru yerdesiniz.
Cevapla
serifaliyagci
Üye
Mesajlar: 5
Kayıt: 26 Kas 2021 06:01

Delphi THTTPRIO Spring Security Sorunu

Mesaj gönderen serifaliyagci »

Arkadaşlar merhaba xe8 ile bir webservisten veri çekmem gerekiyor THTTPRIO bileşeni ile bağlanmaya çalıştığımda spring security application login prompt ekranı geliyor. Ne yaptıysam bir türlü o windows auth formunu aşamadım. Kod aşağıdaki gibi.

Webservisin wsincome metoduna string değeri verdiğim satıra gelince gelir bu windows auth formu. Ayrıca

Rio.HTTPWebNode.GetHTTPReqResp.UserName:='webservis';
Rio.HTTPWebNode.GetHTTPReqResp.Password:='webservis123.';

bu satırları kaldırınca da direk 401 authentication fail alıyorum.


var
WebServis:WsIncome;
str:string;
user, pass : TSimpleHeader;
Stream: TMemoryStream;
StrStream: TStringStream;

begin
Stream := TMemoryStream.Create;
StrStream := Tstringstream.Create(s);
InvRegistry.RegisterHeaderClass(TypeInfo(WsIncome), userName, '...', 'http://...:8080/Stawiz/WsIncome');
InvRegistry.RegisterHeaderClass(TypeInfo(WsIncome), password,'...', 'http://...:8080/Stawiz/WsIncome');
rio.WSDLLocation:='http://...:8080/Stawiz/WsIncome?wsdl';
Rio.URL:='http://...:8080/Stawiz/WsIncome';
rio.Service:='WsIncome';
rio.Port:='BasicHttpBinding_WsIncome';
rio.Converter.Encoding := 'UTF-8';
Rio.HTTPWebNode.InvokeOptions := [soIgnoreInvalidCerts];
Rio.HTTPWebNode.SoapAction:='http://...:8080/Stawiz/WsIncome';
Rio.HTTPWebNode.GetHTTPReqResp.URL:='http://...1:8080/Stawiz/WsIncome';
Rio.HTTPWebNode.GetHTTPReqResp.SoapAction:='http://stawiz.mepsan.com.tr:8080/Stawiz/WsIncome';
Rio.HTTPWebNode.GetHTTPReqResp.UserName:='webservis';
Rio.HTTPWebNode.GetHTTPReqResp.Password:='webservis123.';
Rio.HTTPWebNode.GetHTTPReqResp.InvokeOptions := [soIgnoreInvalidCerts];
Rio.HTTPWebNode.GetHTTPReqResp.Execute(UTF8Encode(Memo1.Text), Stream);

WebServis:=rio as WsIncome;
User := userName.Create;
User.Value := 'webservis';
pass := password.Create;
pass.Value := 'webservis123.';
(Rio as ISOAPHeaders).Send(User);
(Rio as ISOAPHeaders).Send(pass);
str:=WebServis.WsIncome('<SendContact><Transaction>SendSaleList</Transaction><Date>16.09.2021 00:00:00</Date></SendContact>');
Memo1.Lines.Add(str);
end;

bir ayrıntı daha vereyim. httpwebnode1beforepost eventine detaylı araştırmalar sonucu aşağıdaki kodu ekledim. Ama çare olmadı.

procedure TApp.RioHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp;
Data: Pointer);
var
str1: AnsiString;
str2: string;
begin
str1 := 'webservis:webservis123.';
base64.Base64Encode(str1,str1);
str1 := 'Authorization: Basic ' + str1;
str2 := str1;
if not HttpAddRequestHeaders(Data, PChar(str2), Length(str2), HTTP_ADDREQ_FLAG_ADD) then
raise Exception.Create(SysErrorMessage(GetLastError));
end;
ertank
Üye
Mesajlar: 1520
Kayıt: 12 Eyl 2015 12:45

Re: Delphi THTTPRIO Spring Security Sorunu

Mesaj gönderen ertank »

Merhaba,

Web servis detaylı dökümanları olmadan sorunuza direk cevap vermek zor.

Bir test aracı kullanarak çalışan ve kullanıcı adı ve şifre istemeyen bir istek oluşturup kendi gönderdiğiniz ile kıyaslamanız gerekli. Tavsiye olarak SoapUI kullanabilirsiniz.

Sorunsuz bir şekilde SoapUI ile iletişim kurduktan sonra Fiddler Telerik Classic gibi bir araç ile SoapUI iletişim ham verilerini okuyun. Request içindeki ham XML bilgisini bir kenara not edin.

Bundan sonra kendi Delphi uygulamanız ile yapılan iletişim ham verilerini okuyun ve aynı şekilde ham request XML bilgisini kaydedin.

Kaydettiğiniz iki XML arasındaki farkları inceleyerek kod içinde düzeltmeler yaparak ya da RioHTTPWebNode1BeforePost() olayında direk çalışan XML'i elle oluşturarak sorunu çözebiliyor olmalısınız.
serifaliyagci
Üye
Mesajlar: 5
Kayıt: 26 Kas 2021 06:01

Re: Delphi THTTPRIO Spring Security Sorunu

Mesaj gönderen serifaliyagci »

Döküman olarak verilen sadece

username ve password, HTTP REQUEST HEADERS olarak gönderilmelidir.
Web Servis URL ine Stawiz+ IP Adresi girilmelidir.
SOAP Request
<![CDATA[<SendContact>
<Transaction>SendSaleList</Transaction>
<Date>16.09.2021 00:00:00</Date>
</SendContact>]]>

Bu kadar anladığım kadarıyla bu dökümanı hazırlayan arkadaş ile görüştüm bana WebServis.WsIncome() metodu ile xml veri göndermeniz yeterli demişti. TidHTTP ile bağlantı kurmayı da denedim ama ondan da sonuç alamadım.
serifaliyagci
Üye
Mesajlar: 5
Kayıt: 26 Kas 2021 06:01

Re: Delphi THTTPRIO Spring Security Sorunu

Mesaj gönderen serifaliyagci »

SOAPUI ile bağlantı sağladım ancak şöyle bir durum var authorization kısmında No Authorization seçip Headers kısmından kullanıcı adı ve şifre eklersem sorunsuz request veriyor.

Bu durumda ne yapmalıyım kitlendim kaldım?
serifaliyagci
Üye
Mesajlar: 5
Kayıt: 26 Kas 2021 06:01

Re: Delphi THTTPRIO Spring Security Sorunu

Mesaj gönderen serifaliyagci »

Arkadaşlar bir şeyden kesinlikle eminim artık SOAPHeader kısmına kullanıcı adı ve şifre bilgisi ekleyebilirsem sorun çözülecek. Kısa yoldan bunun yapabilmem için yardımcı olabilirseniz sevinirim.
ertank
Üye
Mesajlar: 1520
Kayıt: 12 Eyl 2015 12:45

Re: Delphi THTTPRIO Spring Security Sorunu

Mesaj gönderen ertank »

serifaliyagci yazdı: 29 Kas 2021 04:19 SOAPUI ile bağlantı sağladım ancak şöyle bir durum var authorization kısmında No Authorization seçip Headers kısmından kullanıcı adı ve şifre eklersem sorunsuz request veriyor.

Bu durumda ne yapmalıyım kitlendim kaldım?
Zaten ilk cevabımda yazmıştım. Hiç bilemiyor iseniz RioHTTPWebNode1BeforePost() olayında direk çalışan XML'i elle oluşturarak sorunu çözebiliyor olmalısınız.

İlgili metod içinde gidecek XML'i sıfırdan istediğiniz şekilde düzenleyebilirsiniz.
serifaliyagci
Üye
Mesajlar: 5
Kayıt: 26 Kas 2021 06:01

Re: Delphi THTTPRIO Spring Security Sorunu

Mesaj gönderen serifaliyagci »

Çok teşekkür ederim deniycem.
mkysoft
Kıdemli Üye
Mesajlar: 3089
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Delphi THTTPRIO Spring Security Sorunu

Mesaj gönderen mkysoft »

SOAPHeader kisminda kullanilabilecek birden fazla yontem var. SOAPUI'a servisi ekleyip kontrol edin, duzgun sekilde yapilandiracaktir. Asagida wsse icin delphi ornegi bulabilirsiniz.
https://github.com/mkysoft/soap-wsse-sample
Cevapla