如何在Delphi Sydney REST服务器中实现Authorization: Bearer <Token>授权
Delphi Sydney REST服务器处理Bearer授权头配置方案
问题原因
Indy的TIdHTTPServer默认会自动解析Authorization请求头,当遇到未内置支持的认证方案(比如Bearer)时,会抛出异常。解决核心是通过绑定OnParseAuthentication事件,自定义处理该认证类型。
配置步骤
1. 定位Indy服务器实例
如果你的REST服务器是基于TIdHTTPWebBrokerBridge搭建的,直接访问其Server属性即可获取底层的TIdHTTPServer实例。
2. 绑定事件处理过程
在服务器初始化阶段(比如窗体的OnCreate事件、服务启动前的初始化代码中),为OnParseAuthentication事件赋值:
IdHTTPWebBrokerBridge1.Server.OnParseAuthentication := IdHTTPServerParseAuthentication;
3. 实现事件处理逻辑
编写事件处理过程,识别Bearer认证类型并标记为已处理,避免Indy抛出异常。同时可在此提前解析Token:
procedure TMainForm.IdHTTPServerParseAuthentication(AContext: TIdContext; const AAuthType, AAuthData: string; var VHandled: Boolean); begin if SameText(AAuthType, 'Bearer') then begin // 可选:在此解析AAuthData中的Token,存入上下文供后续请求处理使用 // 示例:AContext.Data := TAuthToken.Create(AAuthData); VHandled := True; // 告知Indy该认证类型已被处理,无需默认逻辑 end; end;
4. 在业务逻辑中获取Token
后续处理REST请求时,可通过以下方式获取Token:
- 直接从请求头读取:
Request.RawHeaders.Values['Authorization'],自行拆分出Bearer后的Token字符串 - 从之前事件处理中存入上下文的对象中读取(如果做了提前解析)
注意事项
- 事件绑定必须在服务器启动前完成,否则无法生效
- 无需修改Indy源码,通过事件扩展即可兼容自定义认证方案
内容的提问来源于stack exchange,提问作者Pieter van Wyk
相关产品推荐
相关产品推荐

