我在 * Delphi 10.2* 中有ISAPI DLL项目,我需要 * 读取 * 所有头项,确切地说是Authorization Bearer来接受或不接受POST请求。使用exe DatasnapBroker,这是一个成功的代码
FServer := TIdHTTPWebBrokerBridge.Create(Self);
FServer.OnParseAuthentication := OnDoParseAuthentication;
字符串
在函数OnDoParseAuthentication中
procedure TForm1.OnDoParseAuthentication(AContext: TIdContext; const AAuthType,
AAuthData: String; var VUsername, VPassword: String; var VHandled: Boolean);
function DoParseAuthentication(ASender: TIdContext; const AAuthType,
AAuthData: String; var VUsername, VPassword: String): Boolean;
var
s,__BaseName, __GuidBase: String;
begin
Result := False;
if TextIsSame(AAuthType, 'Basic') then begin
with TIdDecoderMIME.Create do try
s := DecodeString(AAuthData);
finally Free; end;
VUsername := Fetch(s, ':');
VPassword := s;
Result := True;
end
else if TextIsSame(AAuthType, 'Bearer') then
begin
with TIdDecoderMIME.Create do try
s := DecodeString(AAuthData);
finally Free; end;
//decrypt jwt or oauth2.0 in my Tjwt.Decodejwt_Bearer class
//for header / payload-data / signature
//sur ISAPI uniquement ici, sur exe lors du create
if Tjwt.Decodejwt_Bearer(AAuthData,__BaseName, __GuidBase) then
begin
//verifier et valider
Result := True;
end;
end;
end;
begin
VHandled := DoParseAuthentication(AContext, AAuthType, AAuthData, VUsername, VPassword);
end;
型
但是,我不知道如何读取授权,我的request中总是空的。TWebModule1.WebModuleBeforeDispatch中的授权
如果我的头中有:接受编码:gzip,deflate Content-Type:application/json Host:localhost:811 User-Agent:Apache-HttpClient/4.1.1(java 1.5)Content-Length:396授权:基础VEVDSF...... cCNG
- 没关系,请求。授权=基本....
但是如果我写授权:Bearer eyJhbGciOiJS....Im
- 这是KO,请求。授权= ''
1条答案
按热度按时间eblbsuwk1#
ISAPI Web应用程序中
TWebModule
的Request
属性的值是Web.Win.IsapiHTTP
中TISAPIRequest
类的示例。通过EXTENSION_CONTROL_BLOCK
结构的GetServerVariable
函数实现阅读Authorization
属性的值。getter最终在TISAPIRequest.GetFieldByNameA
方法中结束,该方法只能从单个HTTP头中读取最多4095字节的数据。在减去'Bearer '
前缀的大小后,这将承载令牌限制为4088字节。要解决
TISAPIRequest
的这个限制,您可以实现自己的扩展方法来阅读请求数据:字符串
要访问
Authorization
头,您可以调用:型