delphi 如何使用datasnap获取作为头传递的令牌?

laawzig2  于 2023-08-04  发布在  其他
关注(0)|答案(2)|浏览(212)

在我的客户端应用程序中,我使用以下代码在头中添加一个令牌:

RESTRequest.Params.AddItem('Authorization', 'Bearer ' + MyToken, TRESTRequestParameterKind.pkHTTPHEADER, [TRESTRequestParameterOption.poDoNotEncode]);

字符串
我想使用datasnap在我的服务器中获取此令牌。
我试过使用herehere的答案,但没有成功。
有可能吗?
我该怎么办?

编辑

我可以验证Datasnap执行TIdCustomHTTPServer.DoParseAuthenticationDoParseAuthentication调用FOnParseAuthentication(如果被分配)。

那么,我如何破解Datasnap来分配我自己的OnParseAuthentication

我想这解决了我的问题。

s6fujrry

s6fujrry1#

我也有同样的问题。如果使用了Authentication头,那么我们会得到EIdHTTPUnsupportedAuthorisationScheme错误,我需要设置OnParseAuthentication。我今天才开始研究这个问题,在测试应用程序“桌面”中,我可以做以下操作。

procedure TMainForm.FormCreate(Sender: TObject);
begin
  FServer := TIdHTTPWebBrokerBridge.Create(Self);
  FServer.OnParseAuthentication := DoParseAuthentication;// <-added this line
end;

字符串
现在我需要弄清楚如何更新Asapi dll来做同样的事情。

yjghlzjz

yjghlzjz2#

procedure TForm1.DoParseAuthentication(AContext: TIdContext;
  const AAuthType, AAuthData: String; var VUsername, VPassword: String;
  var VHandled: Boolean);
var
  AuthValue: String;
begin
  if SameText(AAuthType, 'Bearer') then
  begin
    // AAuthData should contain the bearer token
    // You should validate the token here and set the VUsername or VPassword
    // to the corresponding values if the token is valid.
    AuthValue := AAuthData;
    
    // Add your token validation logic here. If the token is valid, you could 
    // set VUsername to the corresponding username and VHandled to True.
    
    // Example:
    // if ValidateToken(AuthValue) then
    // begin
    //   VUsername := GetUserNameFromToken(AuthValue);
    //   VHandled := True;
    // end;

    VHandled := True;
  end;
end;

字符串

相关问题