在SAP Cloud Foundry部署Springboot应用调用BAPI时遇凭证错误
将Spring Boot应用打包为WAR包,以TomEE7作为TARGET_RUNTIME部署至SAP Cloud Foundry环境,使用sapjco3并通过SAP Cloud SDK调用BAPI时,触发权限验证失败错误。
错误日志
com.sap.cloud.sdk.cloudplatform.security.exception.TokenRequestFailedException: Failed to resolve access token.","\tat com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2ServiceImpl.lambda$executeClientCredentialsFlow$1(OAuth2ServiceImpl.java:119)"
Error requesting technical user token with grant_type 'client_credentials': Error retrieving JWT token. Server URI https: xxxxxxxxxxxxxx dev.authentication.eu20.hana.ondemand.com/oauth/token. Http status code 401. Response body '{"error":"unauthorized","error_description":"Bad credentials"}'","\tat com.sap.cloud.security.xsuaa.tokenflows.ClientCredentialsTokenFlow.requestTechnicalUserToken(ClientCredentialsTokenFlow.java:188)","\tat com.sap.cloud.security.xsuaa.tokenflows.ClientCredentialsTokenFlow.execute(ClientCredentialsTokenFlow.java:141)","\tat ...

操作依据
已按照以下官方文档步骤执行:
- SAP Cloud SDK for Java > 调用BAPI/RFC模块
- SAP BTP Connectivity CF > 通过RFC调用ABAP函数模块 > 调用本地ABAP系统中的ABAP函数模块 > 开发示例Web应用 > 引入JCo依赖
核对XSUAA服务凭证
- 执行
cf env <你的应用名称>,查看VCAP_SERVICES里xsuaa节点的clientid和clientsecret是否与实际配置一致,排除凭证输入错误。 - 确认XSUAA服务实例已配置对应RFC调用所需的权限scope,确保技术用户能获取到有效令牌。
- 执行
修正Token请求配置
- 检查代码中ClientCredentialsTokenFlow的配置,确保自动加载XSUAA凭证(Spring Boot环境下需确保SDK自动配置生效)。
- 修复token请求URI的格式错误,正确地址应为
https://dev.authentication.eu20.hana.ondemand.com/oauth/token,避免URI截断或拼接错误。
适配TomEE7容器环境
- 检查WAR包的
WEB-INF/lib目录,确认包含完整的sap-cloud-sdk-security、xsuaa-tokenflows等依赖,避免版本冲突或依赖缺失。 - 由于TomEE7是Servlet容器,需确保SDK的Servlet相关自动配置类被正确加载,可通过添加
@EnableSapCloudSdk注解确保配置生效。
- 检查WAR包的
验证后端权限与连通性
- 确认Cloud Connector已正确映射目标SAP系统,且应用绑定的Connectivity服务配置无误。
- 检查调用RFC使用的技术用户在SAP系统中是否拥有对应BAPI的调用权限,以及用户名密码是否正确配置在连通性服务中。
内容的提问来源于stack exchange,提问作者Athul Ram

