Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr
  • 0

EMS서버로 REST API구축시 권한 부여 및 인증


midaskpp

질문

안녕하세요...

델파이 RAD 10.4 사용하고 있습니다.

 EMS 서버로  REST API를 구축하고 있습니다.

[REST TOP 5] #4. 리소스 접근 시, 사용자 인증 방법

https://www.youtube.com/watch?v=4OytDlzFskM&list=PLHH6P0isPjCCiSsp1Q42vndlZnH8AZQS1&index=14

RAD 서버엔진 권한부여를 따라하기를 하고 있습니다. 좋은 영상 감사합니다.
EMSProvider, BackendAuth , BackendEndpoint
를 이용해 사용자 인증 테스트를 하고 있는데 작동은 잘됨니다.

emsserver.ini 설정을 변경 Version={"users":["test"]}
procedure TForm6.Button1Click(Sender: TObject);
begin
 BackendAuth1.UserName:='test';
 BackendAuth1.Password:='testpass';
 BackendAuth1.Login;
 BackendEndpoint1.Execute;
end;

사용자 권한 부여 여기까지는 잘 작동됨니다.
그런데  REST Debegger 에서는 접근이 안되는데 Authentication 설정을 어떻게 해야하는지 잘모르겠습니다.
그리고 REST API를 제공할려고 하는데  다른 프로그램 언어 에서 어떻게 접근하는지 잘 모르겠습니다.

 

종은하루 되세요?
 

이 댓글 링크
다른 사이트에 공유하기

2 answers to this question

Recommended Posts

  • 0

(먼저 저희 컨텐츠에 관심을 가져주셔서 대단히 감사합니다.)

이 답변에서는 다음 내용을 설명합니다.

목차


1 "RAD 서버 엔진의 권한 설정(Authorization)과 인증(Authentication)" 관련 자료 안내

RAD 서버는 엔진 내부에 이미 사용자 관리/인증 및 리소스 접근 권한 설정 기능이 내장되어 있습니다.

"RAD 서버 엔진 권한"은 RAD 서버에서 제공하는 리소스에 대한 권한 즉 접근(Access)을 허용하거나 거부하는 보안 기능을 제공합니다.

다음 유튜브 영상 앞부분에서 "RAD 서버 엔진 권한"에 대해 설정하고 활용하는 내용의 데모를 확인할 수 있습니다.

2 RAD 서버에서 제공하는 REST API의 리소스를 (REST 클라이언트에서) HTTP를 통해 요청하고 인증받는 방법

위 영상에서는 REST 클라이언트를 구현할 때, RAD 스튜디오에서 제공하는 RAD 서버 전용 컴포넌트(TBackendAuth, TBackendEndpoint)를 이용해 "RAD 서버엔진 인증"과 연동했기 때문에 해당 컴포넌트가 없는 즉 RAD 스튜디오가 아닌 개발 환경에서는 어떻게 인증을 통과하는 지를 볼 수 없습니다.

그래서, REST 클라이언트는 RAD 서버에서 제공하는 리소스를 요청할 때 인증을 통과하려면 무슨 작업을 하고 어떻게 호출해야 하는가? 라는 질문을 하신 것으로 생각됩니다.

해당 내용은 상단의 기술문서 중 RAD Server User Authentication 섹션에 설명되어 있습니다.

이 문서 중 토큰을 얻는 절차 부분만 뽑으면 다음과 같습니다.

1. 클라이언트에서 로그인을 요청 한다.

POST http://localhost:8080/users/login HTTP/1.1
{"username":"User1","password":"User1pass"}

2. 로그인에 성공하면 서버에서 아래와 같은 Response를 제공한다. 이 Response 안에 있는 sessionToken 값을 취득하여 이후 요청 시 인증 증빙으로 사용 한다.

HTTP/1.1 201 Created
{"username":"User1","_id":"04C3B621-A056-49CF-8C56-D18E8363F58E","_meta":{"creator":"04C3B621-A056-49CF-8C56-D18E8363F58E","created":"2018-05-04T09:05:54.000Z"},"sessionToken":"d7bdc5523d04ecab7a35c1df53a7077d"}

3. 리소스를 요청할 때, HTTP Request(요청)의 Header에 X-Embarcadero-Session-Token 키에 앞에서 확보한 sessionToken 값을 담아서 요청한다.
그러면 로그인에 성공한 User1 임을 인증 받게 된다.

GET http://localhost:8080/test HTTP/1.1
X-Embarcadero-Session-Token: d7bdc5523d04ecab7a35c1df53a7077d

 

3 RAD 서버에서 제공하는 REST API를 사용하는 클라이언트 인증

RAD 서버에서 인증 처리가 잘 되는지를 REST Debugger를 사용하여 테스트하고, 이어서 동일한 요청을 코드로 구현해보겠습니다.

사전 설정

RAD 서버 환경파일(EMSServer.ini)에서 아래와 같이 설정되어있다고 가정합니다.

[Server.Authorization]
Version={"users": ["username1", "username2", "test"]}

즉, Version 리소스는  username1, username2, test 사용자가 접근할 수 있다고 가정합니다.

3.1 엠바카데로 REST Debugger를 사용하여 REST 클라이언트 인증을 테스트하기

로그인하고 sessionToken을 취득한다.

image.png

  • Request 탭
    • Method : POST
    • URL : http://localhost:8080
    • Content-Type : application/json 선택
    • Custom body : {"username":"test", "password":"testpass"} //알맞은 Username과 Password를 넣습니다.
  • Parameters 탭
    • Resource : users/login
  • [Send Request] 버튼 클릭
  • 하단 Response의 Body 중에서 sessionToken 값 취득

sessionToken을 헤더에 넣어서 version 리소스를 호출한다.

image.png

  • Request 탭
  • Parameters 탭
    • Resource : version
    • Request parameters
      • [Add] 버튼 클릭
      • Kind : HEADER 선택
      • NAME : X-Embarcadero-Session-Token 선택
      • Value : 앞에서 취득한 SessionToken 입력
  • [Send Request] 버튼 클릭
  • Response에서 결과 확인

3.2 RAD 서버에서 제공하는 REST API를 HTTP를 통해 요청하고 인증 받는 코드 예문 (델파이)

앞에서 REST Debugger로 진행한 과정을 아래와 같이 델파이 코드로 구현할 수 있습니다.
(델파이가 아닌 클라이언트에서도, 아래 코드를 참고하여, 해당 Request와 Response를 HTTP 규약에 맞게 사용하면 됩니다)

로그인하고 sessionToken을 취득한다.

procedure TForm4.btnLoginClick(Sender: TObject);
var
  JSON: TJSONObject;
  Token: string;
begin
  JSON := TJSONObject.Create;
  JSON.AddPair('username', edtUsername.Text);
  JSON.AddPair('password', edtPassword.Text);

  RESTClient1.BaseURL := 'http://localhost:8080';

  RESTRequest1.Resource := 'users/login';
  RESTRequest1.Method := rmPOST;
  RESTRequest1.Body.Add(JSON);
  RESTRequest1.Execute;

  Memo1.Lines.Text := RESTResponse1.Content;

  if RESTResponse1.JSONValue.TryGetValue<string>('sessionToken', Token) then
    edtToken.Text := Token; //토큰값을 잘 가져왔는 지 TEdit에 표시해보자.
end;

sessionToken을 헤더에 넣어서 version 리소스를 호출한다.

procedure TForm4.btnVersionClick(Sender: TObject);
begin
  RESTClient1.BaseURL := 'http://localhost:8080';

  RESTRequest1.Resource := 'version';
  RESTRequest1.Method := rmGET;

  RESTRequest1.Params.AddItem(
    'X-Embarcadero-Session-Token',
    edtToken.Text,
    pkHTTPHEADER);
  RESTRequest1.Execute;

  Memo1.Lines.Text := RESTResponse1.Content;
end;

샘플 프로젝트 소스코드 다운로드:

RADServerEngineAuth.zip

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 질문에 답변하기...

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.