多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

ABAP Web Service HTTP认证全链路解析:Header、ICF与Basic/X.509/Logon Ticket

ABAP Web Service HTTP认证全链路解析:Header、ICF与Basic/X.509/Logon Ticket 1. 这不是“配个认证”那么简单ABAP Web Service 的 HTTP 认证是一条从网络协议栈底层直通业务逻辑的完整链路你有没有遇到过这样的场景一个 ABAP Web Service 接口明明在 SE80 里测试能跑通但用 Postman 或 Java 客户端一调就返回 401 Unauthorized或者更糟——压根收不到响应ICF 监控里连日志都没有只看到一条模糊的“HTTP/1.1 403 Forbidden”又或者证书导入了、Logon Ticket 生成了、Basic 用户密码也确认无误但服务端就是不认账别急着怀疑代码写错了。我踩过至少 17 次这类坑最后发现问题根本不在 ABAP 程序里而是在那条看不见的 HTTP 请求路上——从你客户端发出去的第一个字节开始到 ICF 框架接住它、解析它、验证它再到最终把请求交给你的 Function Module这整条链路上任何一个环节的认证配置偏差都会让整个调用瞬间崩塌。标题里说的“从 Header 到 ICF再到 Basic、X.509 与 Logon Ticket”绝不是修辞手法而是对这条链路最精准的解剖。它意味着HTTP 认证在 ABAP 平台里不是一个孤立的“开关”而是一个贯穿 OSI 模型第 4 层传输层到第 7 层应用层的系统工程。Header 是客户端发出的“身份名片”ICF 是 SAP 系统的“海关检查站”而 Basic、X.509、Logon Ticket则是三种截然不同的“签证类型”。它们各自有独立的签发逻辑、校验规则和失效机制混用或错配就像拿着申根签证去美国海关排队一样结果注定是拒签。为什么必须抠这个细节因为 ABAP Web Service 的 HTTP 认证直接决定了你的集成方案是“开箱即用”还是“三天三夜调试”。Basic 认证简单但明文传输密码只适合内网X.509 证书安全但需要 PKI 基础设施支持客户端证书管理成本高Logon Ticket 是 SAP 自家的 SSO 方案无缝对接 NetWeaver 用户体系但对外部非 SAP 系统兼容性差。选错一种轻则暴露安全风险重则导致整个集成项目返工。这篇文章就是我把这三年在三个大型 ERP 升级项目里亲手调试、抓包、翻文档、改配置攒下来的全套实战笔记。不讲虚的原理只告诉你每一步该点哪里、填什么、为什么这么填以及——最关键的是当它不工作时你该先看哪一行日志、查哪个事务码、抓哪一段网络包。核心关键词 ABAP、Web Service、HTTP、ICF、Basic每一个都对应着一个你无法绕开的实操节点。如果你正被 Web Service 的 401/403 折磨或者正在设计一个需要对外提供 API 的 ABAP 服务那么接下来的内容就是你手边最该打开的那本操作手册。2. 认证链路全景图Header 是起点ICF 是枢纽三类认证是终点2.1 为什么说“从 Header 到 ICF”是理解认证的第一把钥匙很多开发者一上来就去 SICF 里狂点“Basic Authentication”复选框结果发现没用。原因很简单ICF 根本没机会看到你的认证信息因为请求在抵达 ICF 之前就已经被拦在了网络层或协议层。我们得先画出这条请求的真实路径[客户端] ↓ 发送 HTTP 请求含 Authorization Header ↓ 经过防火墙、负载均衡器可能篡改/剥离 Header ↓ 到达 ABAP 应用服务器的 HTTP 端口通常是 8000/50000 ↓ 进入 ICFInternet Communication Framework框架 ↓ ICF 解析 URL匹配到对应的 SICF 服务节点 ↓ ICF 根据该节点配置决定启用哪种认证方式Basic / X.509 / Logon Ticket ↓ ICF 执行认证校验 Basic 凭据 / 验证 X.509 证书 / 解析 Logon Ticket ↓ 认证成功 → 将请求转发给后端的 Web Service 处理程序如 SOAMANAGER ↓ 认证失败 → 直接返回 401 或 403请求终止看到没AuthorizationHeader 是整条链路的“第一张船票”。如果客户端根本没发这个 Header或者发错了格式比如Basic dXNlcjpwYXNz写成了Basic user:pass那么 ICF 连“要验什么”的机会都没有直接拒之门外。我见过最典型的错误是 Java 开发者用HttpURLConnection调用时忘了手动设置setRequestProperty(Authorization, Basic base64Credentials)结果请求里压根没有 Authorization 字段ICF 日志里只有一句No authorization header found然后就 401 了。这不是 ABAP 的问题这是客户端的锅。所以排查的第一步永远是抓包。用 Wireshark 或 Chrome DevTools 的 Network Tab确认你发出的请求里确确实实包含了一行Authorization: ...。它的值必须是标准的 Base64 编码且格式严格为Basic base64-encoded-credentials。注意base64-encoded-credentials是username:password这个字符串的 Base64 编码不是用户名和密码分别编码。例如用户demo密码Abap123!组合字符串是demo:Abap123!Base64 编码后是ZGVtbzpBYmFwMTIzIQ最终 Header 就是Authorization: Basic ZGVtbzpBYmFwMTIzIQ。少一个等号或者多了空格ICF 都会拒绝。2.2 ICFABAP 的“HTTP 入口总控室”配置错一点全盘皆输ICF 不是某个具体的事务码而是一个运行时框架。它的配置入口是事务码SICF。在这里每一个 Web Service 的 URL 路径都对应一个树状结构里的叶子节点。比如一个标准的 SOAP Web Service其路径通常是/sap/bc/srt/wsdl/flv_0010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000......这个超长路径是系统自动生成的实际中会短很多在 SICF 树里就表现为/sap/bc/srt/wsdl/...这样的节点。关键点来了ICF 的认证配置是“继承式”的不是“全局式”的。你不能在根节点/上设置一个 Basic 认证然后指望所有子服务都生效。必须逐层、逐节点地去配置。最常见的错误配置有三种只配了父节点没配子节点比如你在/sap/bc/srt节点上启用了 Basic但你的 Web Service 实际路径是/sap/bc/srt/wsdl/flv_...而这个wsdl节点本身没有启用认证那么请求到达wsdl节点时ICF 就会认为“此处无需认证”直接放行。结果就是你的服务被裸奔暴露了。配错了节点层级Web Service 的 ICF 节点通常位于/sap/bc/srt/wsdl/或/sap/bc/srt/rfc/下。如果你误操作把认证配在了/sap/public/bc/urx/这是 BSP 应用的路径下那完全不相关毫无作用。覆盖了默认的匿名访问SAP 系统默认对很多 ICF 节点如/sap/public/bc/urx/是允许匿名访问的。如果你在一个本该匿名的节点上强行启用了 Basic那么所有未带凭证的请求都会被拒这可能导致 BSP 页面打不开等连锁问题。正确的操作流程是在SICF中用CtrlF搜索你的 Web Service 的完整 URL 路径精确定位到那个叶子节点。右键点击该节点 →Edit Service。切换到Service标签页 → 找到Authentication区域。这里才是真正的“三选一”战场勾选Basic Authentication、SSL Client Certificate即 X.509、或Logon Ticket。注意这三个选项是互斥的一次只能选一种。选多了系统会报错。提示SSL Client Certificate这个选项名容易让人误解。它指的不是服务器证书那是 HTTPS 加密用的而是客户端证书。当你勾选它时ICF 会强制要求客户端在建立 HTTPS 连接时提供一个由受信任 CA 签发的客户端证书并用该证书里的 DNDistinguished Name来映射 ABAP 用户。这和 Basic 完全是两套体系。2.3 三类认证机制的本质差异它们解决的是三个不同维度的安全问题Basic、X.509、Logon Ticket表面看都是“证明你是谁”但底层逻辑天差地别。理解它们的差异是选对方案的前提。Basic Authentication这是最古老、最简单、也最“脆弱”的方式。它的核心逻辑是“信任通道不信任内容”。它假设你走的是 HTTPS加密通道所以明文传输的用户名密码是安全的。ICF 收到 Base64 编码后直接解码然后调用 ABAP 的用户验证函数SU3_USER_CHECK去校验这个用户名和密码是否有效。它的优点是通用性极强任何 HTTP 客户端都能轻松实现缺点是一旦 HTTPS 被中间人攻击MITM密码就彻底泄露。因此Basic 只应部署在绝对可信的内网环境或者与 HTTPS 强制绑定。在 SICF 配置里启用 Basic 后ICF 会自动检查请求是否来自 HTTPS如果不是会直接拒绝防止明文密码外泄。X.509 Client Certificate这是基于 PKI公钥基础设施的强认证。它的核心逻辑是“信任证书不信任密码”。客户端必须持有由 SAP 系统信任的 CA证书颁发机构签发的数字证书。当客户端发起 HTTPS 请求时除了完成 TLS 握手还会把自己的证书发送给服务器。ICF 收到后会验证证书的有效期、签名链、吊销状态CRL/OCSP并提取证书中的Subject DN例如CNJohn Doe, OUIT, OMyCompany。然后它会把这个 DN 映射到一个 ABAP 用户。这个映射关系是在事务码STRUST证书管理里配置的。你可以把一个 DN 直接映射到一个具体的 ABAP 用户也可以映射到一个“证书用户组”再通过角色授权。X.509 的优势在于零密码、防暴力破解、可追溯性强劣势是部署复杂需要维护 CA 和证书生命周期。Logon Ticket这是 SAP 自家的“单点登录SSO”方案。它的核心逻辑是“信任票据不信任会话”。当一个用户已经成功登录到某个 SAP 系统比如 Portal 或 Fiori Launchpad后系统会生成一个加密的、有时效性的 Logon Ticket并存储在用户的浏览器 Cookie 里通常是MYSAPSSO2。当这个用户再去访问另一个启用了 Logon Ticket 认证的 ABAP Web Service 时浏览器会自动带上这个 Cookie。ICF 收到后会用自己的私钥解密这个 Ticket验证其签名、有效期和来源系统Ticket Issuer如果一切正常就提取 Ticket 里携带的用户名并以此身份执行后续操作。Logon Ticket 的最大优势是用户体验无缝用户无需重复输入密码但它有一个致命限制它只在 SAP 生态内部有效。一个 Java 客户端、一个 Python 脚本根本无法生成或解析MYSAPSSO2Cookie所以 Logon Ticket 只适用于 SAP-to-SAP 的集成场景。3. 实操详解从零开始配置每一种认证方式3.1 Basic Authentication五分钟搞定但细节决定成败Basic 认证看似简单但实操中 80% 的失败案例都出在几个不起眼的细节上。我们一步步来。第一步确保 HTTPS 已启用这是 Basic 的前提。进入SICF找到你的 Web Service 节点右键Edit Service→SSL标签页。确认SSL Required是勾选状态。如果不勾选ICF 允许 HTTP 访问但此时 Basic 认证会被禁用因为 SAP 认为在明文通道上传输密码是不可接受的。你会看到错误日志Basic authentication is not allowed for non-SSL connections。第二步在 ICF 节点启用 Basic还是在Edit Service窗口切换到Service标签页在Authentication区域勾选Basic Authentication。保存。第三步客户端构造 Authorization Header这是最容易出错的地方。以 Python 为例import base64 import requests # 错误示范直接拼接字符串 # auth_header Basic demo:Abap123! # 这是错的 # 正确示范先拼接再 Base64 编码 credentials demo:Abap123! encoded_credentials base64.b64encode(credentials.encode(utf-8)).decode(utf-8) headers { Authorization: fBasic {encoded_credentials}, Content-Type: text/xml; charsetutf-8 } response requests.post(https://your-sap-system:44300/sap/bc/srt/wsdl/..., headersheaders, datasoap_xml)注意base64.b64encode()返回的是字节对象必须.decode(utf-8)转成字符串否则f-string会报错。第四步ABAP 用户权限检查ICF 只负责验证用户名密码不负责授权。即使认证通过如果该用户没有执行该 Web Service 所需的权限对象如S_SERVICE,S_RFC,S_HTTPN调用依然会失败报错No authorization to call service。你需要用SU01检查该用户的角色确保其拥有SAP_ALL仅测试用或最小化授权集。注意Basic 认证的用户必须是 ABAP 系统里的“对话用户”Dialog User类型为A。不能是S系统用户或B通信用户。因为 ICF 的认证模块CL_HTTP_AUTHENTICATION_BASIC内部调用的是SU3_USER_CHECK这个函数只对对话用户有效。我曾经用一个通信用户RFC_USER去测试死活不通过最后发现SU01里用户类型写错了。3.2 X.509 Client CertificatePKI 世界的入场券X.509 的配置是三者中最复杂的因为它横跨了网络、安全、ABAP 三个领域。我们分客户端和服务器两端来说。服务器端SAP配置导入信任的 CA 证书这是基石。进入事务码STRUST。在左侧树状结构中选择SSL Client SSL Server Standard这是用于客户端证书验证的证书列表。点击Import Certificate导入你的根 CA 证书.cer或.pem文件。导入后务必点击Save然后点击Certificate→Check确保证书状态是Valid。配置 DN 到 ABAP 用户的映射在STRUST中展开你刚导入的 CA 证书右键Properties→User Mapping。在这里你可以添加一条映射规则。Distinguished Name字段填写你客户端证书的完整 DN例如CNJohn Doe, OUIT, OMyCompany, CCN。User Name字段填写你要映射到的 ABAP 用户名例如JDOE。保存。这条规则的意思是“所有 Subject DN 完全匹配此字符串的客户端证书其请求将被视为用户 JDOE 发起”。在 ICF 节点启用 X.509回到SICF编辑你的 Web Service 节点在Service标签页的Authentication区域勾选SSL Client Certificate。保存。客户端以 OpenSSL 为例配置客户端需要一个由上述 CA 签发的、包含私钥的 PFX/P12 文件。用 OpenSSL 生成一个测试证书# 1. 生成私钥 openssl genrsa -out client.key 2048 # 2. 生成证书签名请求 (CSR) openssl req -new -key client.key -out client.csr -subj /CNTestClient/OUIT/OMyCompany/CCN # 3. 用你的 CA 私钥和证书为 CSR 签发客户端证书 openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 # 4. 将客户端证书和私钥打包成 PFX 文件Java/Postman 需要 openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx -name TestClient在 Postman 中进入Settings→Certificates→Add Certificate填入域名如your-sap-system.com、PFX 文件路径和密码。这样Postman 在访问该域名时就会自动发送这个客户端证书。实操心得X.509 的调试极度依赖日志。开启 ICF 的详细日志在SICF中右键你的节点 →Log Configuration→ 将Log Level设为Verbose。然后在SMICM里查看日志搜索关键词SSL_CLIENT_CERTIFICATE。如果日志里出现No client certificate provided说明客户端根本没发证书如果出现Certificate validation failed说明证书链、有效期或 DN 匹配出了问题。抓包看 TLS 握手阶段客户端是否真的发送了Certificate消息是最快的定位手段。3.3 Logon TicketSAP 生态内的“免密通行证”Logon Ticket 的配置核心在于“票据的签发者”和“票据的验证者”必须是同一个信任域。通常签发者是你的 SAP Portal 或 Fiori Launchpad验证者是你的 ABAP 应用服务器。第一步在签发系统如 Portal生成 Ticket这一步通常由前端应用自动完成你不需要手动干预。但你需要确认 Portal 的UMEUser Management Engine配置正确能为用户生成有效的MYSAPSSO2Cookie。第二步在 ABAP 应用服务器配置 Ticket 验证进入事务码RZ10Profile Maintenance。找到你的实例配置文件如DEFAULT.PFL添加或修改以下参数login/create_sso2_ticket 1 login/accept_sso2_ticket 1 login/certificate_login 0其中login/accept_sso2_ticket 1是关键它告诉 ABAP 系统允许接收并验证MYSAPSSO2Cookie。login/create_sso2_ticket 1则允许系统自己生成 Ticket用于内部重定向。第三步在 ICF 节点启用 Logon Ticket在SICF中编辑你的 Web Service 节点在Service标签页的Authentication区域勾选Logon Ticket。保存。第四步确保 Cookie 路径和域名匹配这是 Logon Ticket 失败的最常见原因。MYSAPSSO2Cookie 的Domain属性必须与你的 ABAP Web Service 的主机名相匹配。例如Portal 的地址是https://portal.mycompany.com生成的 Cookie Domain 是.mycompany.com那么你的 ABAP 系统地址也必须是https://abap.mycompany.com而不是https://abap.internal。否则浏览器不会把 Cookie 发送给 ABAP 服务器。你可以在 Chrome DevTools 的 Application → Cookies 里查看当前页面的MYSAPSSO2Cookie 的Domain和Path属性确保它们覆盖了你的 Web Service URL。注意Logon Ticket 是有有效期的通常为 8 小时可配置。过期后Cookie 会被浏览器自动删除下次访问会触发重新登录。如果你在调试时发现 Ticket 总是失效可以临时在RZ10中增加login/ticket_lifetime_minutes 144024 小时来延长方便测试。4. 故障排查实战401/403 错误背后的 12 种真相当 Web Service 返回 401 Unauthorized 或 403 Forbidden 时不要慌。根据我的经验这 12 种情况占了 95% 的故障率。我按排查顺序从最简单到最复杂给你列一张速查表。序号错误现象最可能原因快速验证方法解决方案1401 Unauthorized且 ICF 日志里有No authorization header found客户端根本没发AuthorizationHeader用 Wireshark 或 Postman 的 Console 查看原始请求检查客户端代码确认setRequestProperty(Authorization, ...)已正确调用2401 Unauthorized日志显示Invalid basic authentication headerAuthorization Header 格式错误检查 Header 值是否为Basic base64且base64是user:pass的 Base64 编码用在线 Base64 工具验证编码是否正确注意不要有多余空格3401 Unauthorized日志显示User username does not exist or password incorrectABAP 用户不存在或密码错误在SU01中检查该用户是否存在、状态是否为Active、密码是否正确重置用户密码或创建一个新测试用户4401 Unauthorized日志显示User username is locked用户被锁定了在SU01中查看用户状态栏用SUIM或SU01解锁用户5403 Forbidden日志显示SSL required but connection is not secure客户端用了 HTTP但 ICF 要求 HTTPS检查 URL 是http://还是https://强制使用 HTTPS URL或在 ICF 的SSL标签页取消SSL Required不推荐6401 Unauthorized日志显示SSL client certificate not provided客户端没发证书或证书格式不对抓包看 TLS 握手阶段是否有Certificate消息确认客户端已加载 PFX 文件并在请求中启用了客户端证书7401 Unauthorized日志显示SSL client certificate validation failed证书验证失败过期、CA 不信任、DN 不匹配在STRUST中检查证书状态用openssl x509 -in cert.crt -text -noout查看证书详情更新证书或在STRUST中重新导入正确的 CA 证书8401 Unauthorized日志显示No user mapping found for DN dnSTRUST中的 DN 映射配置错误在STRUST中检查User Mapping条目确认 DN 完全一致包括大小写和空格仔细核对 DN 字符串必要时用通配符*匹配部分字段9401 Unauthorized日志显示Logon ticket invalid or expiredLogon Ticket 过期或签名无效在浏览器 Cookie 中查看MYSAPSSO2的Expires时间在RZ10中增加login/ticket_lifetime_minutes参数延长有效期10401 Unauthorized日志显示Logon ticket issuer not trustedABAP 系统不信任 Ticket 的签发者检查RZ10中login/ticket_signer参数或STRUST中的签发者证书在STRUST中导入 Portal 的签名证书11403 Forbidden日志无明显错误但请求没进到你的 Function ModuleICF 节点配置了认证但后端服务SOAMANAGER没授权在SOAMANAGER中检查该服务的Security设置在SOAMANAGER中找到你的服务 →Configuration→Security确保Authentication与 ICF 一致且Authorization已正确配置12401/403以上全检查无误但依然失败防火墙或负载均衡器剥离了 Header 或证书在 ABAP 应用服务器上用tcpdump抓包对比客户端发出的包和服务器收到的包配置防火墙/负载均衡器透传AuthorizationHeader 和SSL Client Certificate我踩过的最深的坑有一次所有配置都对但就是 401。最后发现是公司的 F5 负载均衡器为了“优化性能”默认会剥离所有AuthorizationHeader。F5 的工程师说这是“标准行为”花了两天才说服他们加了一条 iRule 规则把AuthorizationHeader 透传过来。所以永远不要假设网络设备是透明的。在生产环境一定要把网络设备纳入排查范围。5. 高级技巧与避坑指南让认证稳定运行的 7 个关键实践5.1 “双认证”模式Basic X.509 的混合部署策略在一些高安全要求的场景单一认证方式可能不够。比如你希望内部员工用 X.509 证书强安全而外部合作伙伴用 Basic易集成。SAP 本身不支持一个 ICF 节点同时启用两种认证但我们可以通过“路径分流”来实现。思路是创建两个不同的 ICF 节点指向同一个后端 Web Service但配置不同的认证方式。节点 A/sap/bc/srt/wsdl/internal/...启用SSL Client Certificate。节点 B/sap/bc/srt/wsdl/external/...启用Basic Authentication。然后在SOAMANAGER中为这两个节点分别配置不同的服务绑定Service Binding但都指向同一个 WSDL 和同一个 Function Module。这样内部系统调用internal/...路径走证书外部系统调用external/...路径走 Basic。这是一种非常实用的“灰度发布”和“安全分级”策略。5.2 认证日志的黄金组合SMICM ICM_TRACE ST01光看 ICF 日志是不够的。要真正搞懂认证失败的原因必须组合使用三个工具SMICM查看 ICF 的实时日志过滤HTTP和SSL关键词这是第一线。ICM_TRACE在SMICM中选择Goto→Trace→Start Trace设置Trace Level为3最高然后复现问题。Trace 文件会记录每一个 HTTP 请求的完整处理流程包括 Header 解析、证书验证、用户映射的每一步是终极调试神器。ST01系统跟踪。在ST01中激活HTTP和SSL的跟踪可以捕获到更底层的网络和加密事件比如 TLS 握手失败的具体原因SSL_ERROR_SSL。5.3 用 ABAP 代码主动获取认证信息有时候你的 Web Service 逻辑需要知道“当前调用者是谁”以及“是用什么方式认证的”。这可以通过 ABAP 系统字段来实现DATA: lv_user TYPE sy-uname, lv_auth_type TYPE string. lv_user sy-uname. 获取当前用户 获取认证类型 CALL FUNCTION HTTP_GET_CURRENT_REQUEST IMPORTING request lv_request. IF lv_request IS NOT INITIAL. lv_auth_type lv_request-get_header_field( name AUTH_TYPE ). AUTH_TYPE 的值可能是 BASIC, SSL_CLIENT_CERT, LOGON_TICKET ENDIF.这个AUTH_TYPE字段就是 ICF 在认证成功后注入到 HTTP 请求上下文里的非常有用。5.4 避免“循环认证”陷阱这是一个极其隐蔽的坑。假设你在一个启用了 Logon Ticket 的 Web Service 里又用CL_HTTP_CLIENT去调用另一个内部的、同样启用了 Logon Ticket 的服务。这时CL_HTTP_CLIENT会自动把当前会话的MYSAPSSO2Cookie 带过去。但如果目标服务的login/ticket_signer配置不正确或者 Cookie 已过期就会导致二次认证失败整个调用链崩溃。解决方案是在内部调用时显式地禁用 Cookie 传递lo_client-request-set_header_field( name ~cookie value ).5.5 测试脚本一键验证所有认证方式我写了一个简单的 ABAP 报告可以快速验证你的 ICF 节点是否配置正确REPORT z_test_icf_auth. PARAMETERS: p_url TYPE string OBLIGATORY DEFAULT https://your-sap-system:44300/sap/bc/srt/wsdl/..., p_user TYPE string DEFAULT demo, p_pass TYPE string DEFAULT Abap123!. START-OF-SELECTION. DATA: lo_http_client TYPE REF TO if_http_client, lv_response TYPE string. TRY. cl_http_clientcreate_by_url( EXPORTING url p_url IMPORTING client lo_http_client EXCEPTIONS argument_not_found 1 plugin_not_active 2 internal_error 3 OTHERS 4 ). IF sy-subrc 0. MESSAGE Failed to create HTTP client TYPE E. ENDIF. 设置 Basic 认证 lo_http_client-request-set_credential( username p_user password p_pass ). lo_http_client-send( ). lo_http_client-receive( ). lv_response lo_http_client-response-get_cdata( ). WRITE: / Status Code:, lo_http_client-response-get_status_code( ), / Response:, lv_response(100). CATCH cx_root INTO DATA(lx_error). MESSAGE lx_error-get_text( ) TYPE E. ENDTRY.运行这个报告就能快速看到是连接失败、认证失败还是业务逻辑失败。5.6 性能考量认证不是免费的午餐Basic 认证每次都要调用SU3_USER_CHECK进行密码哈希比对开销很小。X.509 认证需要进行非对称加密运算RSA/ECDSA验证证书链和签名开销较大。Logon Ticket 认证需要进行对称解密和签名验证开销居中。在高并发场景下X.509 可能成为瓶颈。我的建议是对于 QPS 超过 100 的核心服务优先考虑 Basic内网或 Logon TicketSAP 生态内慎用 X.509。5.7 最后的忠告永远用 HTTPS无论你选择哪种认证方式HTTP 协议本身是不安全的。Basic 的密码、X.509 的证书 DN、Logon Ticket 的 Cookie所有这些敏感信息在 HTTP 明文传输中都如同裸奔。我见过太多项目因为“暂时用 HTTP 测试”结果在测试环境跑得好好的一上生产就被安全团队一票否决。所以从第一天开始就规划好你的 HTTPS 证书服务器证书并强制所有 ICF 节点启用SSL Required。这不是一个可选项而是一条铁律。我在实际操作中发现一个配置完善的 HTTPS Basic 认证其安全性和稳定性远超一个“省事”的 HTTP Basic 方案。多花一天时间配置证书能为你省下三个月的合规审计麻烦。
返回列表