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

时间:2017-09-14 12:30:39

标签: rest delphi restful-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开发的主题不够熟悉,无法知道做什么的正确方法是什么。

我看到还有一个由向导添加的身份验证管理器。但和以前一样,我不知道如何处理它。

1 个答案:

答案 0 :(得分:2)

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

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