Добрый день!
Вопрос простой, но у меня не получилось разобраться, формирую Soap запрос, но в нем аутентификация usernametoket + pasword digit, я все делаю по спецификации, как мне кажется правильно, но не получается добиться ответа от сервера. Если есть у кого -нибудь примеры с формированием секции wss в xml программно, поделитесь пожалуйста.
Да использую XE8, кусок кода прилагаю.
Первый пример с использованием библиотеки Chilkat
Код:
password := 'secret';
crypt := CkCrypt2_Create();
CkCrypt2_putHashAlgorithm(crypt,'SHA-1');
CkCrypt2_putEncodingMode(crypt,'base64');
// Generate a 16-byte random nonce
prng := CkPrng_Create();
bd := CkBinData_Create();
CkPrng_GenRandomBd(prng,16,bd);
// Get the current date/time in a string with this format: 2010-06-08T07:26:50Z
dt := CkDateTime_Create();
CkDateTime_SetFromCurrentSystemTime(dt);
created := CkDateTime__getAsTimestamp(dt,False);
CkBinData_AppendString(bd,created,'utf-8');
// This example wishes to calculate a password digest like this:
// Password_Digest = Base64 ( SHA-1 ( nonce + created + SHA-1(password) ) )
// First SHA-1 digest the password...
passwordSha1 := CkCrypt2__hashStringENC(crypt,password);
// Append the 20 binary bytes of the SHA1 hash to bd, which already contains the nonce and created date/time.
CkBinData_AppendEncoded(bd,passwordSha1,'base64');
passwordDigest := CkCrypt2__hashBdENC(crypt,bd);
Memo1.Lines.Add('Base64 password digest = ' + passwordDigest);
CkCrypt2_Dispose(crypt);
CkPrng_Dispose(prng);
CkBinData_Dispose(bd);
CkDateTime_Dispose(dt);
Второй пример
Код:
shaHash:= TIdHashSHA1.Create;
try
httpRequest := TstringList.Create; // список строк
//
DateTimeToString(formattedDateTime, 'yyyy-mm-dd"T"hh:nn:ss.zzz"Z"', Now); //ShowMessage(formattedDateTime);
Memo_applog.Lines.Append('Create:' + formattedDateTime);
//
CreateGUID(MyGUID); gUid := GUIDToString(MyGUID); //ShowMessage(gUids);
//gUids := 'Example-1';
Memo_applog.Lines.Append('UsernameToken: ' + gUid);
//
nonce := TIdEncoderMIME.EncodeBytes(ToBytes(gUid ,enUTF8)); //,16));
//nonce := TIdEncoderMIME.EncodeBytes(ToBytes('133216548413')); //ShowMessage(nonce);
Memo_applog.Lines.Append('Nonce: ' +nonce);
//
//string passwordDigest = Convert.ToBase64String(sha1Hasher.ComputeHash(Encoding.UTF8.GetBytes(phrase + createdStr + userToken.Password)
passDigest := TIdEncoderMIME.EncodeBytes(shaHash.HashBytes(ToBytes(gUid + formattedDateTime + 'Password')));
//////bPassword:=shaHash.HashBytes(ToBytes('Password'));
//Memo_applog.Lines.Append(BytesToString(bPassword,IndyTextEncoding_UTF8));
//
userName := 'user';
//Memo_applog.Lines.Append(userName);
Memo_applog.Lines.Append('UserName: ' + userName);
//
//bStr:=ToBytes(gUids + formattedDateTime); //TimeToStr(Now, 'tt', 'yyyy-mm-ddThh:nn:ss.zzzZ')); // '2015-09-07T11:34:50Z');
//bStr:= ToBytes((gUids + formattedDateTime + 'Diat44141aFb'),enUTF8); //TimeToStr(Now, 'tt', 'yyyy-mm-ddThh:nn:ss.zzzZ')); // '2015-09-07T11:34:50Z');
///bStr:= ToBytes(gUid ,enUTF8);
///AppendBytes(bStr, ToBytes(formattedDateTime,enUTF8));
///AppendBytes(bStr, ToBytes('Diat44141aFb',enUTF8));
//ToBytes((gUids + formattedDateTime + 'Diat44141aFb'),enUTF8);
//AppendBytes(bStr, ToBytes('Diat44141aFb'));//bPassword);
//////passDigest := TIdEncoderMIME.EncodeBytes(shaHash.HashBytes(bStr));
//passDigest := BytesToString(bStr,IndyTextEncoding_UTF8);
Memo_applog.Lines.Append('PasswordDigit: ' + passDigest);