REST-Server 适当的身份验证位置

REST-Server proper place for authentication

我有一个 REST 客户端独立桌面应用程序,我可以在其中输入 URL 并可以选择我要执行的 REST 方法类型(POST、GET、PUT 等。 )

客户端主要服务于发送Body-Message(XML-格式)的功能。消息中包含处理消息的所有必要信息。

客户端也有一个 Basic 身份验证器,因此每个请求也发送一个用户名和密码。

在 Delphi XE8 应用程序向导的帮助下,我创建了一个带有身份验证和授权的简单独立 Firemonkey REST 服务器。

当我从客户端应用程序发送请求时,我的服务器能够在向导添加的 "WebModuleDefaultAction" 函数中接收该请求。

我想知道这里是否是检查请求授权合法性的合适位置。

看起来像这样:

procedure TWebModule1.WebModuleDefaultAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
  s:string;
  Username:string;
  Password:String;
begin
  s:=Copy(Request.Authorization,7,length(Request.Authorization)-6);
  s:=TNetEncoding.Base64.Decode(s);
  if (Username='JohnDoe') and (Password='MyPassword') then
  begin
    if (Request.InternalPathInfo='') or (Request.InternalPathInfo='/') then Response.Content:=ReverseString.Content
    else if (Request.InternalPathInfo='ShowContent') or (Request.InternalPathInfo='/ShowContent') then Response.Content:=PP_ShowContent.Content
    else Response.SendRedirect(Request.InternalScriptName + '/');

    handled:=true;
  end
  else
  begin
    Response.Content:='Unauthorized';
    handled:=false;
  end;
end;

用户检查目前是静态的,因为授权旨在作为概念证明。

但是,如果我像这样进行授权,那么我希望有一天这个功能会变得太大,而且我也会错过 ServerRoles。不幸的是,我对 REST 开发的主题还不够熟悉,不知道做任何事情的正确方法是什么。

我看到向导还添加了一个身份验证管理器。但是和以前一样,我不知道该怎么办。

尝试使用与您的TDSServer 连接的组件TDSAuthenticationManager。 组件 TDSAuthenticationManager 有一个名为 AuthenticationManager 的事件,该事件在创建用户会话之前调用。如果您的变量 "valid" 最后为真,则用户将进行身份验证。

看到这个https://edn.embarcadero.com/br/article/41267 而这个 https://www.embarcadero.com/images/dm/technical-papers/rest-servers-in-delphi-xe-using-datasnap.pdf