Indy로 다이제스트 액세스 인증에 응답하는 방법

반복까지

다이제스트 액세스 인증을 요청하는 서버로 응답을 보내려고 합니다.

  ....
  FResponseHeader.Text := FResponseText;// received header.
  FResponseHeader.ProcessHeaders;
   ....
  WriteLn(FResponseHeader.WWWAuthenticate); //WWW-Authenticate: Digest realm="xxxx.com", nonce="fq1uvocyzvr17e6a5syproazd5phwdvhvlc5", stale=false, algorithm=MD5, qop="auth"
  LIdAuthentication := TIdDigestAuthentication.Create;
  try
    LIdAuthentication.Username := FUser;
    LIdAuthentication.Password := FPass;
    LIdAuthentication.Uri      := FURI;
    LIdAuthentication.Method   := GetMsgTypeString(FResponseHeader.RequestMethods);
    LIdAuthentication.Params.Values['Authorization'] := FResponseHeader.WWWAuthenticate;
    LIdAuthentication.AuthParams.AddValue('Digest', FResponseHeader.WWWAuthenticate);
    for I := 0 to LIdAuthentication.Steps do
      LIdAuthentication.Next;
    Result := LIdAuthentication.Authentication;
  finally
    LIdAuthentication.Free;
  end;

서버에서 401받았습니다 .

Authorization Header 를 만드는 올바른 방법은 무엇입니까 ?

레미 르보

TIdDigestAuthentication(및 기타 TIdAuthentication파생 클래스)는 TIdHTTP독립형 이 아닌와 함께 사용하기위한 것 입니다.

를 사용하여 TIdHTTP서버와 통신하는 경우 다이제스트 인증을 수동으로 관리 할 필요가 전혀 없습니다. 서버가 헤더 Digest에서 요청 하고 (또는 )이 에 있으면 자동으로 Digest 응답을 보냅니다. 자신에게 관심을 가져야 할 유일한 것은 다음과 같습니다.WWW-AuthenticateIdAuthenticationDigestIdAllAuthenticationsusesTIdHTTP

  • 초기 인증 시도에 대한 TIdHTTP.Request.UsernameTIdHTTP.Request.Password속성을 설정합니다 .

  • TIdHTTP.OnAuthorization서버가 현재 Username/를 거부 할 가능성을 처리하도록 이벤트 핸들러를 설정하여 Password선택적으로 사용자에게 프롬프트 한 후 재 시도에 대한 새 값을 제공 할 수 있습니다.

  • TIdHTTP.OnSelectProxyAuthorization서버에서 여러 체계를 요청하는 경우 및 / 또는 다른 체계보다 우선 순위를 갖는 체계를 제어하려는 경우 사용할 인증 체계를 선택 하는 이벤트 처리기를 선택적으로 설정합니다 .

예를 들면 :

uses
  ..., IdHTTP, IdAuthenticationDigest;

...

IdHTTP1.OnAuthorization := AuthRequested;
IdHTTP1.Request.Username := ...; // initial username
IdHTTP1.Request.Password := ...; // initial password
IdHTTP1.Get(...);

...

procedure TMyClass.AuthRequested(Sender: TObject; Authentication: TIdAuthentication; var Handled: Boolean);
begin
  if (new credentials are available) then
  begin
    Authentication.Username := ...; // new username
    Authentication.Password := ...; // new password
    Handled := True;
  end else
    Handled := False;
end;

즉, TIdDigestAuthentication독립 실행 형 을 사용하려면 사용 방법과 유사하게 사용해야 TIdHTTP합니다. 예 :

LIdAuthentication := TIdDigestAuthentication.Create;
try
  LIdAuthentication.SetRequest(FGetMsgTypeString(FResponseHeader.RequestMethods), FURI);
  LIdAuthentication.Username := FUser;
  LIdAuthentication.Password := FPass;
  LIdAuthentication.Params.Values['Authorization'] := LIdAuthentication.Authentication;
  LIdAuthentication.AuthParams := FResponseHeader.WWWAuthenticate; // assuming WWWAuthenticate is a TIdHeaderList...

  repeat
    case LIdAuthentication.Next of
      wnAskTheProgram:
      begin
        // set LIdAuthentication.Username and LIdAuthentication.Password to new credentials to retry...
      end;

      wnDoRequest:
      begin
        // send new request with LIdAuthentication.Authentication in the 'Authorization' header...
        Result := LIdAuthentication.Authentication;
        Exit;
      end;

      wnFail:
      begin
        // error handling ...
        Result := '';
        Exit;
      end;
    end;
  until False;
finally
  LIdAuthentication.Free;
end;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

API 응답에서 데이터에 액세스하는 방법

분류에서Dev

다음 형식의 json 응답에 액세스하는 방법

분류에서Dev

Axios의 RxJS Observable에서 응답에 액세스하는 방법

분류에서Dev

ApiController에서 응답에 액세스하는 방법

분류에서Dev

ApiController에서 응답에 액세스하는 방법

분류에서Dev

Python의 API 응답에서 _content에 액세스하는 방법

분류에서Dev

JSON 응답에서 키-값에 액세스하는 방법

분류에서Dev

스트라이프 결제 후 응답 / 리디렉션에 액세스하는 방법은 무엇입니까?

분류에서Dev

Excel VBA를 사용하여 XML 응답에 액세스하는 방법

분류에서Dev

검증중인 매개 변수에 액세스하는 방법

분류에서Dev

SwiftUI에서 json 응답에 액세스하는 방법은 무엇입니까?

분류에서Dev

AJAX 응답에서 json 배열의 값에 액세스하는 방법

분류에서Dev

인증으로 웹 사이트에 액세스하는 텔넷

분류에서Dev

Ruby-쿼리 응답에 액세스하는 적절한 방법

분류에서Dev

Tomcat 오류 페이지에서 HTTP 응답 텍스트에 액세스하는 방법

분류에서Dev

API 게이트웨이가 인트로 스펙 션을 통해 액세스 토큰을 검증하는 방법

분류에서Dev

클라이언트 측 SSL 인증서로 GitHub 페이지에 대한 액세스를 제한하는 방법은 무엇입니까?

분류에서Dev

보조 트래비스 로그에 액세스하는 방법

분류에서Dev

사이트에서 HTTP 오류 코드를 발행 할 때 xml 응답에 액세스하는 방법

분류에서Dev

IIFE에 액세스하고 문서로 인쇄하는 방법

분류에서Dev

javascript 또는 jquery를 사용하여 ajax 응답 데이터에 html로 액세스하는 방법은 무엇입니까?

분류에서Dev

이 경우 노드 익스프레스 응답 객체에 액세스하는 방법은 무엇입니까?

분류에서Dev

Qt 및 액세스 토큰을 사용하여 GitHub로 인증하는 방법

분류에서Dev

htaccess로 다른 웹 사이트의 액세스를 제한하는 방법

분류에서Dev

콘솔 응용 프로그램 C #에서 SolidBrush에 액세스하는 방법

분류에서Dev

Servicestack에서 쿼리 문자열 형식으로 매개 변수를 전달하고 JSON으로 응답에 액세스하는 방법

분류에서Dev

응답자가 자신의 양식에 액세스 할 수 있도록 Google 양식 응답에 ID 번호를 자동으로 할당 / 생성 / 증가하는 방법은 무엇입니까?

분류에서Dev

이벤트 기반 프로그래밍, 요청을 보낸 인스턴스에 응답하는 방법

분류에서Dev

프로세스에서 액세스 한 URL을 찾는 방법

Related 관련 기사

  1. 1

    API 응답에서 데이터에 액세스하는 방법

  2. 2

    다음 형식의 json 응답에 액세스하는 방법

  3. 3

    Axios의 RxJS Observable에서 응답에 액세스하는 방법

  4. 4

    ApiController에서 응답에 액세스하는 방법

  5. 5

    ApiController에서 응답에 액세스하는 방법

  6. 6

    Python의 API 응답에서 _content에 액세스하는 방법

  7. 7

    JSON 응답에서 키-값에 액세스하는 방법

  8. 8

    스트라이프 결제 후 응답 / 리디렉션에 액세스하는 방법은 무엇입니까?

  9. 9

    Excel VBA를 사용하여 XML 응답에 액세스하는 방법

  10. 10

    검증중인 매개 변수에 액세스하는 방법

  11. 11

    SwiftUI에서 json 응답에 액세스하는 방법은 무엇입니까?

  12. 12

    AJAX 응답에서 json 배열의 값에 액세스하는 방법

  13. 13

    인증으로 웹 사이트에 액세스하는 텔넷

  14. 14

    Ruby-쿼리 응답에 액세스하는 적절한 방법

  15. 15

    Tomcat 오류 페이지에서 HTTP 응답 텍스트에 액세스하는 방법

  16. 16

    API 게이트웨이가 인트로 스펙 션을 통해 액세스 토큰을 검증하는 방법

  17. 17

    클라이언트 측 SSL 인증서로 GitHub 페이지에 대한 액세스를 제한하는 방법은 무엇입니까?

  18. 18

    보조 트래비스 로그에 액세스하는 방법

  19. 19

    사이트에서 HTTP 오류 코드를 발행 할 때 xml 응답에 액세스하는 방법

  20. 20

    IIFE에 액세스하고 문서로 인쇄하는 방법

  21. 21

    javascript 또는 jquery를 사용하여 ajax 응답 데이터에 html로 액세스하는 방법은 무엇입니까?

  22. 22

    이 경우 노드 익스프레스 응답 객체에 액세스하는 방법은 무엇입니까?

  23. 23

    Qt 및 액세스 토큰을 사용하여 GitHub로 인증하는 방법

  24. 24

    htaccess로 다른 웹 사이트의 액세스를 제한하는 방법

  25. 25

    콘솔 응용 프로그램 C #에서 SolidBrush에 액세스하는 방법

  26. 26

    Servicestack에서 쿼리 문자열 형식으로 매개 변수를 전달하고 JSON으로 응답에 액세스하는 방법

  27. 27

    응답자가 자신의 양식에 액세스 할 수 있도록 Google 양식 응답에 ID 번호를 자동으로 할당 / 생성 / 증가하는 방법은 무엇입니까?

  28. 28

    이벤트 기반 프로그래밍, 요청을 보낸 인스턴스에 응답하는 방법

  29. 29

    프로세스에서 액세스 한 URL을 찾는 방법

뜨겁다태그

보관