Заголовочный заголовок авторизации HttpClient создан, но исчезает - PullRequest
0 голосов
/ 18 октября 2018

Проблема

Я пытаюсь отправить заголовки запросов, в частности, заголовок авторизации.Заголовок авторизации должен выглядеть примерно так: Authorization: Basic NTY2MTI0Og== В списке заголовков.Где Basic указывает, что он закодирован в base64.

Я уверен, что он добавляется к запросу get, выполненному в Angular: Запрос в Angular. Хотя я не уверенчто такое op(кстати, мне пока не разрешено встраивать изображение)

Вот как это должно выглядеть: Из стандартного проекта Datasnap Delphi

Это то, что моевыглядит так: введите описание изображения здесь

Как видите, отсутствует заголовок авторизации.

Ошибки

КонсольОшибка: Снимок экрана

Запрос Fiddler Raw: Снимок экрана

Вот как я создаю вызов Rest:

public authRestCall(auth: string): Observable<string> {
  var headers = new HttpHeaders;
  //HttpHeaders is immutable
  headers = headers.append('Authorization', 'Basic ' + auth);
  return this.http.get<string>(this.localUrl + 'DSAdmin/GetPlatformName', {headers: headers});
}

Альтернатива

Другой способ, которым я пытался это сделать, - создать объект, подобный этому, описанный в Угловое руководство

const httpOptions = {
  headers: new HttpHeaders({
  'Authorization': 'NTY2MTI0OnVuZGVmaW5lZA=='
  })
};

, которое я затем добавил бы какэто:

return this.http.get<string>(this.localUrl + 'DSAdmin/GetPlatformName', httpOptions;

Delphi

На внутреннем сервере (модуль Delphi datasnap) я настроил CORS следующим образом:

Response.setCustomHeader('Access-Control-Allow-Origin','*');
Response.SetCustomHeader('Access-Control-Allow-Headers','*');
Response.SetCustomHeader('Access-Control-Allow-Methods','*');

Версии

- Angular 5 - ionic-angular: 3.9.2 - List item - Delphi RAD studio 10.1 Berlin


Источники, которые не решили эту проблему для меня

Angular 4.3 HTTPClient Basic Authorization не работает

Угловой HttpClient не устанавливает заголовок авторизации

Угловой 4.3 HttpClient не отправляет заголовок авторизации

Добавление заголовка «Авторизация» в запрос на получение

Я проверил еще много вопросов, но ни один из них не помог мне решить проблему.Я застрял на этом почти неделю.Может быть, я что-то не правильно понимаю, но это не работает.

Если что-то не понятно или мне нужно добавить дополнительную информацию о чем-то, пожалуйста, дайте мне знать.Спасибо за прочтение.


Скриншоты как текст

Угловой заголовок объекта:

headers: Map(0) {}
lazyInit: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, headers: 
Map(0)}
lazyUpdate: Array(1)
  0:
    name: "Authorization"
    op: "a"
    value: "Basic NTY2MTI0OnVuZGVmaW5lZA=="
    __proto__: Object
    length: 1
  __proto__: Array(0)
normalizedNames: Map(0) {}
__proto__: Object

Как это должно выглядеть:

Request URL: http://localhost:8080/datasnap/rest/DSAdmin/GetPlatformName/
Request Method: GET
Status Code: 200 OK
Remote Address: 127.0.0.1:8888
Referrer Policy: no-referrer-when-downgrade
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: *
Access-Control-Allow-Origin: *
Connection: close
Content-Length: 20
Content-Type: text/html; charset=UTF-8
Date: Thu, 18 Oct 2018 10:09:38 GMT
Pragma: dssession=63572.937476.131783,dssessionexpires=1197188
Accept: application/json
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;q=0.9,nl-NL;q=0.8,nl;q=0.7,en-US;q=0.6
Authorization: Basic NTY2MTI0Og==
Cache-Control: max-age=0
Content-Type: text/plain;charset=UTF-8
Host: localhost:8080
If-Modified-Since: Mon, 1 Oct 1990 05:00:00 GMT
Proxy-Connection: keep-alive
Referer: http://localhost:8080/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

Как выглядит мой:

Request URL: http://localhost:8080/datasnap/rest/DSAdmin/GetPlatformName
Request Method: OPTIONS
Status Code: 401 Unauthorized
Remote Address: [::1]:8080
Referrer Policy: no-referrer-when-downgrade
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: *
Access-Control-Allow-Origin: *
Connection: close
Content-Length: 49
Content-Type: text/html; charset=utf-8
Date: Thu, 18 Oct 2018 13:47:12 GMT
WWW-Authenticate: Basic realm="REST"
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;q=0.9,nl-NL;q=0.8,nl;q=0.7,en-US;q=0.6
Access-Control-Request-Headers: authorization
Access-Control-Request-Method: GET
Connection: keep-alive
Host: localhost:8080
Origin: http://localhost:8100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36

Ошибка консоли:

VM1038:1 OPTIONS http://localhost:8080/datasnap/rest/DSAdmin/GetPlatformName 
401 (Unauthorized)
(anonymous) @ VM1038:1

(index):1 Failed to load 
http://localhost:8080/datasnap/rest/DSAdmin/GetPlatformName: Response for 
preflight does not have HTTP ok status.

Fiddler Raw: Запрос

OPTIONS http://localhost:8080/datasnap/rest/DSAdmin/GetPlatformName HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost:8100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
Access-Control-Request-Headers: authorization,x-authentication,x-authentication-impersonate
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;q=0.9,nl-NL;q=0.8,nl;q=0.7,en-US;q=0.6

Ответ

HTTP/1.1 401 Unauthorized
Connection: close
Content-Type: text/html; charset=utf-8
Content-Length: 49
Date: Thu, 18 Oct 2018 10:06:24 GMT
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: *
WWW-Authenticate: Basic realm="REST"
<HTML><BODY><B>401 Unauthorized</B></BODY></HTML>

1 Ответ

0 голосов
/ 18 октября 2018

Я исправил это, добавив следующий фрагмент кода в TWebModule1.WebModuleBeforeDispatch в Delphi:

if Trim(Request.GetFieldByName('Access-Control-Request-Headers')) <> '' then
begin
  Response.SetCustomHeader('Access-Control-Allow-Headers', Request.GetFieldByName('Access-Control-Request-Headers'));
  Handled := True;
end;

Источник: Ошибка CORS в модуле ISAPI Delphi Datasnap

...