REST 서버를 구현하고자합니다 Delphi tokyo(10.2)로 가능한가요? (세션인증포함)

안녕하세요

현재 delphi 10.2(tokyo) 버전으로 기존 개발자가 구현해놓은 소스를 가지고 JSON타입으로 서버,클라

이언트 사이에 연동 및 nexus db값 조회등 간단한 안드로이드 프로그램을 만들고 있습니다.

문제점은 미리 구현해놓은 소스가 서버 ip와 method를 보내면 로그인(인증세션)에 상관없이 결과값을

무조건 response하게 됩니다. 그래서 추가로 서버딴에서 클라이언트 로그인시 인증키 혹은 token값을

생성하여 request, response 받을때 헤더쪽에 포함해야된다는 이론적인 면만 알고있습니다.

질문 : 혹시 delphi 10.2 버전에서 이것들을 구현할수있나요?

구현할수있다면 간단한 예제나 소스를 구할수 있을까요?

아래는 현재 소스 일부입니다

procedure TfrmMain.ServerStart;
begin
  fServer := THttpApiServer.Create(false);
  fServer.AddUrl('임시주소', '80', false, '+', true);   << 임시주소는 임의로 가린값입니다.
  fServer.RegisterCompress(CompressDeflate);
  fServer.OnRequest := Process;
end;

function TfrmMain.Process(Ctxt: THttpServerRequest): cardinal;
var
  FN : RawUTF8;
begin
  FN := StringReplaceChars(UrlDecode(copy(Ctxt.URL,10,maxInt)),'/','\');

  if (UpperCase(Ctxt.Method) = 'POST') then
  begin
    if (FN = 'getServerIP') then
    begin
      Ctxt.OutContent := StringToUTF8(DM.getServerIP(UTF8DecodeToUnicodeString(Ctxt.InContent)).ToString);
      Ctxt.OutContentType := JSON_CONTENT_TYPE;
      result := 200;
    end
    else if (FN = 'doLogin')then
    begin
      Ctxt.OutContent := 
    StringToUTF8(DM.doLogin(UTF8DecodeToUnicodeString(Ctxt.InContent)).ToString);
      Ctxt.OutContentType := JSON_CONTENT_TYPE;
      result := 200;
    end
    else if (FN = '개인정보조회')then
    begin
      Ctxt.OutContent := 
    StringToUTF8(DM.doLogin(UTF8DecodeToUnicodeString(Ctxt.InContent)).ToString);
      Ctxt.OutContentType := JSON_CONTENT_TYPE;
      result := 200;
    end


위같이 구현되어있습니다

현재는 http://임시주소/doLogin  << 유저 로그인단계없이 http://임시주소/개인정보조회 를 

request하면 개인정보를 조회할수있습니다. doLogin을 하고 그 세션을 유지해야만 다른 메소드를 실

행할수 있는 방법은 어떻게 구현되어야 하나요 ㅠ 초보라 쉽게 써주셨으면 좋겠습니다.

1답변

  • 델파이는 모르는데 찾아보니 델파이에도 JSON Web Token을 쓸 수 있다고 하네요.

    원리를 간단히 설명 드리면, 로그인할 때 서버는 클라이언트에 어떤 스트링을 돌려주는데, 그 스트링은 사실 (서버에만 있는 키를 갖고) 복호화를 해보면 로그인한 사람의 식별 정보와 각종 필요한 정보들이 숨겨져 있는 문자열이고, 로그인한 사람은 그 스트링을 쿠키로든 파일로든 뭐로든 갖고 있다가, 나중에 뭔가 인증이 필요한 요청을 할 때 그 스트링을 HTTP 요청헤더 어딘가에 살짝 포함시켜서 요청하는 겁니다. 그러면 서버는 그 헤더가 있을 때 그 내용을 복호화해 봐서, 그 내용이 멀쩡할 때만 거기 담겨 있는 식별 정보를 가지고 그 사람에게 맞는 요청 처리를 응답하게 됩니다.

    JWT가 말이 어렵지 한마디로 세션 + 정보배열 입니다. 쓰려고 맘먹으면 쓸 수 있습니다. 시도해 보세요.

    • 아 일단 감사합니다 검색만 일주일째고 JWT나 JWK인지 뭐 엄청 많은 방법과 세션관리 방법도 보안에 따라서 많다는 이론적인 사실은 알겠지만 구현(코딩) 자체를 어떻게 시작해야되는지 감도 없고 잘모르겠네요 참고해서 검색해보도록 하겠습니다 ^_^ 김철호 2018.11.1 18:49

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.